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
Freigeben: 2025-01-18 06:57:08
Original
542 Leute haben es durchsucht

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:

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]);
}
Nach dem Login kopieren

Diese Methode ersetzt die Ausdrucksinstanz durch den folgenden Code:

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);
}
Nach dem Login kopieren

Praxisbeispiel

Angegeben ein Attributselektor:

Expression<Func<object, string>> propertySelector = cust => cust.Name;
Nach dem Login kopieren

und eine Modellauswahl:

Expression<Func<Model, Customer>> modelSelector = model => model.Customer;
Nach dem Login kopieren

Sie können sie wie folgt kombinieren:

Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage