J'ai la requête suivante:Création d'une requête LINQ dynamique
from p in dataContext.Repository<IPerson>()
join spp1 in dataContext.Repository<ISportsPerPerson>() on p.Id equals spp1.PersonId
join s1 in dataContext.Repository<ISports>() on spp1.SportsId equals s1.Id
join spp2 in dataContext.Repository<ISportsPerPerson>() on p.Id equals spp2.PersonId
join s2 in dataContext.Repository<ISports>() on spp2.SportsId equals s2.Id
where s1.Name == "Soccer" && s2.Name == "Tennis"
select new { p.Id };
Il sélectionne toute la personne qui joue au football et le tennis.
Lors de l'exécution, l'utilisateur peut sélectionner d'autres variables à ajouter à la requête, par exemple: "Hockey". maintenant ma question est, comment pourrais-je ajouter dynamiquement "Hockey" à la requête? Si « Hockey » est ajouté à la requête, il ressemblerait à ceci:
from p in dataContext.Repository<IPerson>()
join spp1 in dataContext.Repository<ISportsPerPerson>() on p.Id equals spp1.PersonId
join s1 in dataContext.Repository<ISports>() on spp1.SportsId equals s1.Id
join spp2 in dataContext.Repository<ISportsPerPerson>() on p.Id equals spp2.PersonId
join s2 in dataContext.Repository<ISports>() on spp2.SportsId equals s2.Id
join spp3 in dataContext.Repository<ISportsPerPerson>() on p.Id equals spp3.PersonId
join s3 in dataContext.Repository<ISports>() on spp3.SportsId equals s3.Id
where s1.Name == "Soccer" && s2.Name == "Tennis" && s3.Name == "Hockey"
select new { p.Id };
Il serait préférable que la requête est construit dynamiquement comme:
private void queryTagBuilder(List<string> tags)
{
IDataContext dataContext = new LinqToSqlContext(new L2S.DataContext());
foreach(string tag in tags)
{
//Build the query?
}
}
Toute personne a une idée sur la façon de régler cela correctement? Merci d'avance!
Dupliquer? http://stackoverflow.com/questions/2712337/passing-a-where-clause-for-a-linq-to-sql-query-as-a-parameter/2712795 – Steven