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
Libérer: 2025-01-28 19:56:10
original
982 Les gens l'ont consulté

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

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

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

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