"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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?

Publié le 2025-02-26
Parcourir:457

How Can I Dynamically Select Columns in LINQ Queries?

Sélection de colonne dynamique dans linq

sélectionner dynamiquement une colonne spécifique dans une requête LINQ peut être difficile lorsque la colonne est inconnue au moment de la compilation. Cependant, il existe une solution qui implique la création dynamique des expressions de lambda transmises à sélectionner.

Considérez la classe de données suivante:

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; }
}

Pour sélectionner dynamiquement des colonnes spécifiques, vous pouvez utiliser la méthode CreateEnewstatement pour créer une expression de lambda dynamiquement:

private Func 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>(xInit, xParameter);
    return lambda.Compile();
}

Cette méthode prend une liste de champs séparée par des virgules en tant que chaîne et génère dynamiquement une expression lambda qui initialise un nouvel objet de données avec le champ spécifié.

Vous pouvez ensuite utiliser la méthode CreateEnewstatement pour créer une expression lambda et la passer pour sélectionner:

var result = list.Select(CreateNewStatement("Field1, Field2"));

Cela renverra une séquence d'objets de données avec le champ spécifié peuplé. Notez que cette technique convient aux situations où le champ sélectionné n'est pas connu au moment de la compilation. Si le champ sélectionné est statique, il est plus efficace d'utiliser des expressions LAMBDA régulières ou des méthodes basées sur la réflexion.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3