Heim >Backend-Entwicklung >C++ >Wie transformiere ich Ausdrücke für verschachtelte Eigenschaften in MVC-Parametern?
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!