Maison > développement back-end > C++ > Comment les expressions dynamiques de Lambda peuvent-elles permettre une projection de données sélective dans C # LINQ au moment de l'exécution?

Comment les expressions dynamiques de Lambda peuvent-elles permettre une projection de données sélective dans C # LINQ au moment de l'exécution?

Barbara Streisand
Libérer: 2025-01-28 19:51:09
original
614 Les gens l'ont consulté

How Can Dynamic Lambda Expressions Enable Selective Data Projection in C# LINQ at Runtime?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal