Heim > Backend-Entwicklung > C++ > Wie konvertiere ich einen LINQ-Ausdruck von „obj => obj.Prop' in „parent => parent.obj.Prop'?

Wie konvertiere ich einen LINQ-Ausdruck von „obj => obj.Prop' in „parent => parent.obj.Prop'?

Patricia Arquette
Freigeben: 2025-01-18 07:17:09
Original
540 Leute haben es durchsucht

Konvertieren Sie den LINQ-Ausdruck „obj => obj.Prop“ in „parent => parent.obj.Prop“

In einigen Fällen ist es notwendig, einen LINQ-Ausdruck, der eine Eigenschaft direkt von einem Objekt auswählt, in einen Ausdruck zu konvertieren, der eine Eigenschaft über ein übergeordnetes Objekt auswählt. Beispielsweise muss ein Ausdruck wie „cust => cust.Name“ in „parent => parent.Customer.Name“ konvertiert werden.

Hierfür können Sie das Konzept der Ausdruckskomposition verwenden. Dazu gehört das Erstellen einer Funktion, die zwei Ausdrücke als Argumente akzeptiert: einen, der eine Eigenschaft auswählt, und einen anderen, der das Objekt auswählt, das diese Eigenschaft enthält. Das folgende Codebeispiel bietet eine Lösung mit dieser Methode:

<code class="language-csharp">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]);
}</code>
Nach dem Login kopieren

Darüber hinaus ist eine Hilfsmethode namens „Replace“ erforderlich, um alle Vorkommen eines Ausdrucks zu ersetzen:

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

Mit diesen Hilfsmethoden ist es jetzt möglich, Ausdrücke wie diesen zu kombinieren:

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

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

// 组合两个表达式
Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);</code>
Nach dem Login kopieren

Dieser Ansatz bietet eine flexible Lösung zum Kombinieren von Ausdrücken für den Zugriff auf verschachtelte Eigenschaften und eignet sich daher für eine Vielzahl von Szenarien, einschließlich MVC-Methodenparametern.

How to Convert a LINQ Expression from obj.Prop“ zu „parent => parent.obj.Prop“? " />

Das obige ist der detaillierte Inhalt vonWie konvertiere ich einen LINQ-Ausdruck von „obj => obj.Prop' in „parent => parent.obj.Prop'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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