Maison >développement back-end >C++ >Comment puis-je sélectionner dynamiquement les colonnes dans les requêtes LINQ?

Comment puis-je sélectionner dynamiquement les colonnes dans les requêtes LINQ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-28 19:56:101050parcourir

How Can I Dynamically Select Columns in LINQ Queries?

Colonnes dynamiques dans la sélection LINQ

Lorsque la liste est inconnue, la colonne spécifique de la requête LINQ peut être difficile. Cependant, il existe une solution impliquant l'expression de lambda transmise pour sélectionner.

Considérez la classe de données suivante:

Afin de sélectionner dynamiquement une colonne spécifique, vous pouvez utiliser la méthode CreateEnewstatement pour créer dynamiquement les expressions Lambda:
<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>

Cette méthode utilise la liste de la virgule pour séparer la liste en tant que chaîne et génère dynamiquement une expression de lambda.
<code class="language-csharp">private 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);
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);
    return lambda.Compile();
}</code>

Ensuite, vous pouvez utiliser la méthode CreateEnewstatement pour créer des expressions lambda et la passer pour sélectionner:

Cela renverra une séquence avec un objet de données rempli dans un champ spécifié. Veuillez noter que cette technologie convient au champ inconnu lors de la compilation. Si le champ sélectionné est statique, la méthode conventionnelle de l'expression de LambdA ou basée sur le réflexe est plus efficace.
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>

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:
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