dynamique linq: sélectionnez une colonne spécifique
En supposant la scène suivante: vous avez une classe de données contenant plusieurs champs, et vous souhaitez sélectionner une colonne spécifique en fonction de la dynamique d'entrée fournie par l'utilisateur. Cela pose un défi car le champ sélectionné est inconnu lors de la compilation.
Création dynamique de l'expression de lambda
Afin de surmonter cet obstacle, nous pouvons créer dynamiquement une expression lambda qui exécute le sélectionné. La méthode est la suivante:
comment utiliser
<code class="language-csharp">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(); }</code>
Cela créera une expression lambda qui sélectionne dynamiquement les propriétés "Field1" et "Field2" pour effectuer efficacement la projection personnalisée des données.
Conclusion
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
En utilisant cette technologie, vous pouvez surmonter les restrictions de la définition statique de la projection LINQ et activer la sélection dynamique en fonction de l'entrée. Cela permet une plus grande flexibilité et adaptabilité pour obtenir une plus grande flexibilité et adaptabilité dans le scénario de traitement des données qui n'est pas connu à l'avance.
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!