Heim >Backend-Entwicklung >C++ >Wie kann ich Spalten in LINQ -Abfragen dynamisch auswählen?
Wenn die Liste unbekannt ist, kann die spezifische Spalte in der LINQ -Abfrage eine Herausforderung sein. Es gibt jedoch eine Lösung, bei der der an die Auswahl übergebene Lambda -Ausdruck beteiligt ist.
Betrachten Sie die folgende Datenklasse:
Um eine bestimmte Spalte dynamisch auszuwählen, können Sie die Methode für die CreateNewStatement verwenden, um dynamisch Lambda -Ausdrücke zu erstellen:
<code class="language-csharp">public class Data { public string Field1 { get; set; } public string Field2 { get; set; } public string Field3 { get; set; } public string Field4 { get; set; } public string Field5 { get; set; } }</code>
Diese Methode verwendet die Liste des Kommas, um die Liste als Zeichenfolge zu trennen, und generiert dynamisch einen Lambda -Ausdruck.
<code class="language-csharp">private Func<Data, Data> CreateNewStatement(string fields) { var xParameter = Expression.Parameter(typeof(Data), "o"); var xNew = Expression.New(typeof(Data)); var bindings = fields.Split(',') .Select(o => o.Trim()) .Select(o => { var mi = typeof(Data).GetProperty(o); var xOriginal = Expression.Property(xParameter, mi); return Expression.Bind(mi, xOriginal); }); var xInit = Expression.MemberInit(xNew, bindings); var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter); return lambda.Compile(); }</code>
Dann können Sie mit der Methode für die CreateNewStatement Lambda -Ausdrücke erstellen und sie verabschieden, um:
auszuwählen:
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>Dies gibt eine Sequenz mit einem Datenobjekt zurück, das in einem angegebenen Feld gefüllt ist. Bitte beachten Sie, dass diese Technologie beim Kompilieren für das unbekannte Bereich geeignet ist. Wenn das ausgewählte Feld statisch ist, ist die herkömmliche Lambda -Expression oder Reflex -basierte Methode effizienter.
Das obige ist der detaillierte Inhalt vonWie kann ich Spalten in LINQ -Abfragen dynamisch auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!