aus Unter der Annahme der folgenden Szene: Sie haben eine Datenklasse mit mehreren Feldern und möchten eine bestimmte Spalte basierend auf der vom Benutzer bereitgestellten Eingabedynamik auswählen. Dies bringt eine Herausforderung, da das ausgewählte Feld beim Kompilieren nicht bekannt ist.
Dynamische Lambda -Expressionserstellung
Um dieses Hindernis zu überwinden, können wir dynamisch einen Lambda -Ausdruck erstellen, der die ausgewählten ausführt. Die Methode lautet wie folgt:
wie manverwendet
public 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); // Lambda表达式 var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter); // 编译 return lambda.Compile(); }
Dies erzeugt einen Lambda -Ausdruck, der die Eigenschaften "Feld1" und "Feld2" dynamisch auswählt, um eine benutzerdefinierte Projektion von Daten effektiv durchzuführen.
<论> Schlussfolgerung
var result = list.Select(CreateNewStatement("Field1, Field2"));
Mit dieser Technologie können Sie die Einschränkungen der statischen Definition der LINQ -Projektion überwinden und die dynamische Auswahl entsprechend der Eingabe aktivieren. Dies ermöglicht eine größere Flexibilität und Anpassungsfähigkeit, um eine größere Flexibilität und Anpassungsfähigkeit im Datenverarbeitungsszenario zu erzielen, das im Voraus nicht bekannt ist.
Das obige ist der detaillierte Inhalt vonWie kann ich dynamisch bestimmte Spalten in LINQ auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!