Maison > développement back-end > C++ > Comment Dynamic LINQ peut-il activer la sélection de colonnes dynamiques en C #?

Comment Dynamic LINQ peut-il activer la sélection de colonnes dynamiques en C #?

DDD
Libérer: 2025-01-28 20:06:11
original
830 Les gens l'ont consulté

How Can Dynamic LINQ Enable Dynamic Column Selection in C#?

c # dynamique linq: réalisez la sélection dynamique de la colonne

Considérant la classe de données contenant plusieurs champs ci-dessous:

<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>
Copier après la connexion
Supposons que vous souhaitiez sélectionner dynamiquement une colonne spécifique dans la liste des objets de données, par exemple, uniquement Field1 et Field2. Pendant la scène du champ sélectionné et vous devez spécifier ces champs au moment de l'exécution, l'utilisation de Dynamic LINQ est une méthode efficace.

Afin d'implémenter dynamiquement cela, nous pouvons créer dynamiquement une expression lambda:

<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
Cette méthode accepte la chaîne du nom de champ requise comme entrée et renvoie une expression

lambda. L'expression de Lambda crée dynamiquement un nouvel objet de données avec une valeur de champ spécifiée, afin de sélectionner ces champs. Func<Data, Data>

En utilisant cette méthode, nous pouvons choisir une liste spécifique dans la liste de données comme ceci:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Copier après la connexion
Même si vous ne connaissez pas le champ sélectionné pendant la compilation, cela peut également fournir des solutions dynamiques et flexibles pour sélectionner des colonnes dans la requête LINQ.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal