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
556 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:

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]);
}
Salin selepas log masuk

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

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);
}
Salin selepas log masuk

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

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

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

// 组合两个表达式
Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);
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!

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