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); }; }
3 Réponses :
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();
Vous pouvez utiliser System.Linq.Dynnamic Nuget à cet effet basé sur commentaire, pour convertir à la liste, on peut utiliser p>
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); code> ... J'ai mis à jour le code complet en op.
Laissez-nous Continuer cette discussion en chat .
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();
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". Code> ... 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.