Dynamische Spaltenauswahl in linq
Die dynamische Auswahl einer bestimmten Spalte in einer LINQ -Abfrage kann eine Herausforderung sein, wenn die Spalte zur Kompilierungszeit unbekannt ist. Es gibt jedoch eine Lösung, bei der dynamische Erstellung von Lambda -Ausdrücken zur Auswahl dynamisch erstellt wird.
Betrachten Sie die folgende Datenklasse:
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; }
}
Um bestimmte Spalten dynamisch auszuwählen, können Sie die Methode CreateNewStatement verwenden, um einen Lambda -Ausdruck dynamisch zu erstellen:
private Func 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>(xInit, xParameter);
return lambda.Compile();
}
Diese Methode enthält eine von Kommas getrennte Liste von Feldern als Zeichenfolge und generiert dynamisch einen Lambda-Ausdruck, der ein neues Datenobjekt mit dem angegebenen Feld initialisiert.
Sie können dann die Methode für die createNewStatement verwenden, um einen Lambda -Ausdruck zu erstellen und sie zu verabschieden, um es auszuwählen:
var result = list.Select(CreateNewStatement("Field1, Field2"));
Dies gibt eine Abfolge von Datenobjekten mit dem angegebenen Feld zurück. Beachten Sie, dass diese Technik für Situationen geeignet ist, in denen das ausgewählte Feld zum Kompilierungszeit nicht bekannt ist. Wenn das ausgewählte Feld statisch ist, ist es effizienter, regelmäßige Lambda-Ausdrücke oder reflektionsbasierte Methoden zu verwenden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3