Maison > développement back-end > C++ > Comment puis-je sélectionner dynamiquement des colonnes spécifiques dans LINQ?

Comment puis-je sélectionner dynamiquement des colonnes spécifiques dans LINQ?

Patricia Arquette
Libérer: 2025-01-28 20:08:12
original
360 Les gens l'ont consulté

How Can I Dynamically Select Specific Columns in LINQ?

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>
Copier après la connexion
Avec les fonctions de création lambda, vous pouvez maintenant exécuter des choix dynamiques:

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

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!

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