J'utilise Linq et Entity Framework. J'ai une Entité de page, qui a une relation plusieurs-à-plusieurs avec une Entité de Balise.Création d'expressions Linq avec des variables
Je souhaite créer une requête Linq qui récupère toutes les pages correspondant à toutes les balises fournies (sous la forme d'un Int64 []).
J'ai essayé divers exemples WhereIn et BuildContainsExpression, mais aucun ne fonctionne comme prévu.
Je suis maintenant en train de boucle à travers chacune des balises et construire une liste d'expressions:
foreach (Int64 item in Tags)
{
Expression<Func<Pages, bool>> tagFilter = c => c.Tags.Any(x => x.TagID == item);
exp.Add(tagFilter);
}
Cependant, je pense que le « point » variable locale est de déconner avec la requête parce que ce dernier utilise un tag, ou aucun d'entre eux lorsque la requête est exécutée, si je les préciser comme ceci:
Expression<Func<Pages, bool>> tagFilter1 = c1 => c1.Tags.Any(x => x.TagID == 70);
exp.Add(tagFilter1);
Expression<Func<Pages, bool>> tagFilter2 = c1 => c1.Tags.Any(x => x.TagID == 130);
exp.Add(tagFilter2);
Expression<Func<Pages, bool>> tagFilter3 = c1 => c1.Tags.Any(x => x.TagID == 77);
exp.Add(tagFilter3);
Utilisation du nombre réel « 70 » par exemple, cela fonctionne comme un charme. Je stocke les expressions dans une liste et j'utilise LinqKit pour And() them.
Y at-il un moyen de garder cette dynamique?
Il semble que tout le monde se heurte à ce problème au moins une fois en travaillant avec lambdas. Ils devraient vraiment chercher à en faire un avertissement du compilateur pour utiliser une variable portée dans un foreach/pour directement dans un lambda. – bobbymcr
Merci beaucoup! –