Heim >Backend-Entwicklung >C++ >Wie transformiere ich Ausdrücke für verschachtelte Eigenschaften in MVC-Parametern?

Wie transformiere ich Ausdrücke für verschachtelte Eigenschaften in MVC-Parametern?

Barbara Streisand
Barbara StreisandOriginal
2025-01-18 06:57:08546Durchsuche

How to Transform Expressions for Nested Properties in MVC Parameters?

Generieren Sie verschachtelte Attributausdrücke in MVC-Parametern

Das Ziel besteht darin, eine Methode zu erstellen, die einen Ausdruck wie „cust => cust.Name“ in „parent => parent.obj.Name“ konvertiert, wobei „parent“ ein untergeordnetes MVC-Modell vom Typ „T“ darstellt Felder. Dieser konvertierte Ausdruck sollte als Argument mit einer MVC-Methode kompatibel sein.

Kombinierter Ausdruck

Der Kern der vorgeschlagenen Lösung besteht darin, Ausdrücke zu kombinieren, ähnlich wie Funktionen kombiniert werden. Der folgende Code demonstriert den Kombinationsmechanismus:

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

Diese Methode ersetzt die Ausdrucksinstanz durch den folgenden Code:

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

Praxisbeispiel

Angegeben ein Attributselektor:

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

und eine Modellauswahl:

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

Sie können sie wie folgt kombinieren:

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

Mit dieser Technik können Sie Ausdrücke so umwandeln, dass sie auf verschachtelte Eigenschaften zugreifen, sodass sie in MVC-Methodenparameter passen.

Das obige ist der detaillierte Inhalt vonWie transformiere ich Ausdrücke für verschachtelte Eigenschaften in MVC-Parametern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn