Lorsque la liste est inconnue, la colonne spécifique de la requête LINQ peut être difficile. Cependant, il existe une solution impliquant l'expression de lambda transmise pour sélectionner.
Considérez la classe de données suivante:
Afin de sélectionner dynamiquement une colonne spécifique, vous pouvez utiliser la méthode CreateEnewstatement pour créer dynamiquement les expressions Lambda:
<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>
Cette méthode utilise la liste de la virgule pour séparer la liste en tant que chaîne et génère dynamiquement une expression de lambda.
<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>
Ensuite, vous pouvez utiliser la méthode CreateEnewstatement pour créer des expressions lambda et la passer pour sélectionner:
Cela renverra une séquence avec un objet de données rempli dans un champ spécifié. Veuillez noter que cette technologie convient au champ inconnu lors de la compilation. Si le champ sélectionné est statique, la méthode conventionnelle de l'expression de LambdA ou basée sur le réflexe est plus efficace.
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!