Heim > Backend-Entwicklung > C++ > Wie können dynamische Lambda -Ausdrücke zur Laufzeit die selektive Datenprojektion in C# Linq ermöglichen?

Wie können dynamische Lambda -Ausdrücke zur Laufzeit die selektive Datenprojektion in C# Linq ermöglichen?

Barbara Streisand
Freigeben: 2025-01-28 19:51:09
Original
614 Leute haben es durchsucht

How Can Dynamic Lambda Expressions Enable Selective Data Projection in C# LINQ at Runtime?

C# Dynamic Linq: Selektive Projektionsdatenattribute

In C#kann LINQ (Sprachintegration) eine effiziente Datenoperation erreichen, indem er eine einfache Anweisung -Grammatik bereitstellt. Bei der Verarbeitung dynamischer Daten oder unbekannter Feldnamen kann die selektive Projektion jedoch schwierig sein.

Berücksichtigung der folgenden Szenarien: Wir haben eine Klasse, die mehrere Felder anzeigt, und möchten dynamisch nur bestimmte Spalten auswählen. Zum Beispiel sind die Datenklasse, die uns gibt, ihre Felder Feld1, Feld2, Feld3, Feld4 und Feld5.

Dynamische Lambda -Expressionserstellung

Um diese dynamische Wahl zu treffen, können wir die leistungsstarken Funktionen verwenden, die durch dynamische Lambda -Ausdrücke erstellt wurden. Wir müssen in der Linq -Anweisung keine neue Lambda -Expression dynamisch auswählen.

Folgendes ist die Methode, die wir diesen Vorgang ausführen können:

Diese Funktion verwendet den erforderlichen Feldnamen als Zeichenfolge und gibt eine

Provision zurück, um eine selektive Projektion durchzuführen.
<code class="language-csharp">Func<Data, Data> CreateNewStatement(string fields)
{
    // 输入参数 "o"
    var xParameter = Expression.Parameter(typeof(Data), "o");

    // 新语句 "new Data()"
    var xNew = Expression.New(typeof(Data));

    // 创建初始化器
    var bindings = fields.Split(',').Select(o => o.Trim())
        .Select(o =>
        {
            // 属性 "Field1"
            var mi = typeof(Data).GetProperty(o);

            // 原始值 "o.Field1"
            var xOriginal = Expression.Property(xParameter, mi);

            // 设置值 "Field1 = o.Field1"
            return Expression.Bind(mi, xOriginal);
        });

    // 初始化 "new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var xInit = Expression.MemberInit(xNew, bindings);

    // 表达式 "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);

    // 编译为 Func<Data, Data>
    return lambda.Compile();
}</code>
Nach dem Login kopieren

Verwendung Func<Data, Data>

Jetzt können wir den dynamischen Lambda -Ausdruck in der LINQ -Anweisung verwenden:

Funktion erzeugt einen Lambda -Ausdruck, der ein neues Datenobjekt projizierte, das nur das angegebene Feld enthält, sodass wir die Spalten während der Laufzeit dynamisch auswählen können.

Diese überarbeitete Reaktion behält die Code -Formatierung für eine bessere Lesbarkeit bei

Das obige ist der detaillierte Inhalt vonWie können dynamische Lambda -Ausdrücke zur Laufzeit die selektive Datenprojektion in C# Linq ermöglichen?. 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