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