0
votes

Lambda Sélectionnez des colonnes sans expression

Je souhaite une requête EF de retourner une colonne entière, mais je souhaite choisir cette colonne avec une variable. Cela peut-il être fait? C'EST À DIRE. Utilisez une variable au lieu d'une expression Lambda en tant que telle:

    foreach(var F in model.FieldMetaData)
    {

        if (F.FieldType == "String")
        {
            PbiFieldData PbiFieldData = new PbiFieldData()
            {
                FieldName = F.FieldName,
                FieldValues = await db.PbiData.Where(x => DatasetList.Contains(x.DatasetId)).Select(F.FieldName).ToListAsync()
        };

            model.PbiData.Add(PbiFieldData);
        };
    }


0 commentaires

3 Réponses :


0
votes

Oui, vous pouvez utiliser l'expression

ParameterExpression param = Expression.Parameter(typeof(Table), yourVariable);
MemberExpression propExpression = Expression.PropertyOrField(param, yourVariable);
Expression<Func<Table, string>> selector = Expression.Lambda<Func<Table, string>>(propExpression, param);
var result = db.Table.Select(selector).First();


0 commentaires

0
votes

Vous pouvez utiliser System.Linq.Dynnamic Nuget à cet effet xxx

basé sur commentaire, pour convertir à la liste, on peut utiliser xxx


7 commentaires

Je ne pense pas que c'est tout ce dont j'ai besoin. Comme indiqué, le nom de la colonne de la liste Select sera une variable, pas une chaîne.


@Eltensionhelp lorsque vous dites une variable. Voulez-vous dire une variable de chaîne qui a columnAname? Dites colonname = "département"? ou alors ?


@ExtensionHelp Si tel est le cas, comme expliqué dans OP, veuillez vérifier la réponse mise à jour


Cela n'a pas produit d'erreur, mais quand j'ai ajouté Tolist () à la fin, c'est. Une idée pourquoi?


Vous pouvez utiliser .tolistasync ().


L'erreur est une nullreferenceException sur modèle.pbidata.add (pbifielddata); ... J'ai mis à jour le code complet en op.


Laissez-nous Continuer cette discussion en chat .



0
votes

Vous pouvez écrire une requête SQL natif:

var FieldValues = ctx.Database.SqlQuery<string>
(
$@"select {fieldName} from PbiData 
where DatasetId in ({string.Join(", ", DatasetList.Select(x => $"'{x}'"))})"
).ToList();


3 commentaires

Pas de chance. Celui-ci produit immédiatement une erreur sur le premier mot clé @ Symbole ", identifiant ou chaîne attendue après le spécificateur Verbatim @"


Je reçois l'erreur Pseudocolumn invalide "$ abffc3b5". ... J'aurais dû mentionner, la gamme de données et les données de données sont des GUIDS, alors peut-être qu'ils doivent être traités différemment.


Pour clarifier, la chaîne "ABFFC3B5" fait partie du GUID du premier jeu de données.