Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengubah Ungkapan untuk Sifat Bersarang dalam Parameter MVC?

Bagaimana untuk Mengubah Ungkapan untuk Sifat Bersarang dalam Parameter MVC?

Barbara Streisand
Lepaskan: 2025-01-18 06:57:08
asal
491 orang telah melayarinya

How to Transform Expressions for Nested Properties in MVC Parameters?

Jana ungkapan atribut bersarang dalam parameter MVC

Matlamatnya ialah untuk mencipta kaedah yang menukar ungkapan seperti "cust => cust.Name" kepada "parent => parent.obj.Name", dengan "parent" mewakili anak dengan model MVC jenis "T" untuk padang. Ungkapan yang ditukar ini harus serasi sebagai hujah kepada kaedah MVC.

Ungkapan gabungan

Inti penyelesaian yang dicadangkan adalah untuk menggabungkan ungkapan, sama seperti cara fungsi digabungkan. Kod berikut menunjukkan mekanisme penggabungan:

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

Kaedah ini menggantikan contoh ungkapan dengan kod berikut:

<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

Contoh praktikal

Diberikan pemilih atribut:

<code class="language-csharp">Expression<Func<object, string>> propertySelector = cust => cust.Name;</code>
Salin selepas log masuk

dan pemilih model:

<code class="language-csharp">Expression<Func<Model, Customer>> modelSelector = model => model.Customer;</code>
Salin selepas log masuk

Anda boleh menggabungkannya seperti berikut:

<code class="language-csharp">Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);</code>
Salin selepas log masuk

Menggunakan teknik ini, anda boleh mengubah ekspresi untuk mengakses sifat bersarang supaya ia sesuai dengan parameter kaedah MVC.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Ungkapan untuk Sifat Bersarang dalam Parameter MVC?. 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