c # dynamique linq: sélectif de données de projection attributs
En C #, LINQ (intégration linguistique) peut réaliser un fonctionnement efficace des données en fournissant une grammaire de déclaration simple. Cependant, lors du traitement des données dynamiques ou des noms de champ inconnus, la projection sélective peut être difficile.
Considérant les scénarios suivants: nous avons une classe qui indique plusieurs champs, et nous voulons choisir dynamiquement uniquement des colonnes spécifiques. Par exemple, la classe de données qui nous donne, ses champs sont Field1, Field2, Field3, Field4 et Field5.
Création dynamique de l'expression de lambda
Afin d'atteindre ce choix dynamique, nous pouvons utiliser les fonctionnalités puissantes créées par les expressions dynamiques de Lambda. Nous n'avons pas à choisir dynamiquement une nouvelle expression de Lambda dans l'instruction LINQ.
Ce qui suit est la méthode que nous pouvons effectuer cette opération:
Cette fonction utilise le nom de champ requis comme une chaîne et renvoie une commission
pour effectuer une projection sélective.<code class="language-csharp">Func<Data, Data> CreateNewStatement(string fields) { // 输入参数 "o" var xParameter = Expression.Parameter(typeof(Data), "o"); // 新语句 "new Data()" var xNew = Expression.New(typeof(Data)); // 创建初始化器 var bindings = fields.Split(',').Select(o => o.Trim()) .Select(o => { // 属性 "Field1" var mi = typeof(Data).GetProperty(o); // 原始值 "o.Field1" var xOriginal = Expression.Property(xParameter, mi); // 设置值 "Field1 = o.Field1" return Expression.Bind(mi, xOriginal); }); // 初始化 "new Data { Field1 = o.Field1, Field2 = o.Field2 }" var xInit = Expression.MemberInit(xNew, bindings); // 表达式 "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }" var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter); // 编译为 Func<Data, Data> return lambda.Compile(); }</code>
Utilisation Func<Data, Data>
Maintenant, nous pouvons utiliser l'expression dynamique de lambda dans l'instruction LINQ: La fonction
génère une expression de lambda, qui a projeté un nouvel objet de données, qui ne contient que le champ spécifié, nous permettant de sélectionner dynamiquement les colonnes pendant l'exécution.Cette réponse révisée maintient le formatage du code pour une meilleure lisibilité.
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!