Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar Ungkapan LINQ daripada 'obj => obj.Prop' kepada 'parent => parent.obj.Prop'?

Bagaimana untuk Menukar Ungkapan LINQ daripada 'obj => obj.Prop' kepada 'parent => parent.obj.Prop'?

Patricia Arquette
Lepaskan: 2025-01-18 07:17:09
asal
489 orang telah melayarinya

Tukar ungkapan LINQ "obj => obj.Prop" kepada "parent => parent.obj.Prop"

Dalam sesetengah kes, adalah perlu untuk menukar ungkapan LINQ yang memilih sifat terus daripada objek kepada ungkapan yang memilih sifat melalui objek induk. Contohnya, ungkapan seperti "cust => cust.Name" perlu ditukar kepada "parent => parent.Customer.Name".

Untuk ini, anda boleh menggunakan konsep gubahan ungkapan. Ini melibatkan penciptaan fungsi yang menerima dua ungkapan sebagai hujah: satu yang memilih harta dan satu lagi yang memilih objek yang mengandungi harta itu. Contoh kod berikut menyediakan penyelesaian menggunakan kaedah ini:

<code class="language-csharp">public static Expression<Func<TFirst, TResult>> Compose<TFirst, TIntermediate, TResult>(
    this Expression<Func<TFirst, TIntermediate>> first,
    Expression<Func<TIntermediate, TResult>> second)
{
    return Expression.Lambda<Func<TFirst, TResult>>(
        second.Body.Replace(second.Parameters[0], first.Body),
        first.Parameters[0]);
}</code>
Salin selepas log masuk

Selain itu, kaedah pembantu yang dipanggil "Ganti" diperlukan untuk menggantikan semua kemunculan ungkapan:

<code class="language-csharp">public class ReplaceVisitor : ExpressionVisitor
{
    private readonly Expression from, to;

    public ReplaceVisitor(Expression from, Expression to)
    {
        this.from = from;
        this.to = to;
    }

    public override Expression Visit(Expression ex)
    {
        if (ex == from) return to;
        else return base.Visit(ex);
    }
}

public static Expression Replace(this Expression ex,
    Expression from,
    Expression to)
{
    return new ReplaceVisitor(from, to).Visit(ex);
}</code>
Salin selepas log masuk

Menggunakan kaedah pembantu ini, kini anda boleh menggabungkan ungkapan seperti ini:

<code class="language-csharp">// 从对象中选择一个属性
Expression<Func<Customer, string>> propertySelector = cust => cust.Name;

// 从模型中选择对象
Expression<Func<Model, Customer>> modelSelector = model => model.Customer;

// 组合两个表达式
Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);</code>
Salin selepas log masuk

Pendekatan ini menyediakan penyelesaian yang fleksibel untuk menggabungkan ungkapan untuk mengakses sifat bersarang, menjadikannya sesuai untuk pelbagai senario, termasuk parameter kaedah MVC.

How to Convert a LINQ Expression from obj.Prop" kepada "parent => parent.obj.Prop"? " />

Atas ialah kandungan terperinci Bagaimana untuk Menukar Ungkapan LINQ daripada 'obj => obj.Prop' kepada 'parent => parent.obj.Prop'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan