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 };
그것은 축구와 테니스를 재생하는 모든 사람을 선택합니다.
런타임시 사용자는 "Hockey"와 같이 쿼리에 추가 할 다른 태그를 선택할 수 있습니다. 이제 내 질문은 어떻게 동적으로 "Hockey"를 쿼리에 추가 할 수 있을까요? "하키"쿼리에 추가한다면 다음과 같을 것이다 :
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 };
그것은 바람직 것 쿼리를 구축하는 경우 동적으로 같은 :
private void queryTagBuilder(List<string> tags)
{
IDataContext dataContext = new LinqToSqlContext(new L2S.DataContext());
foreach(string tag in tags)
{
//Build the query?
}
}
누구나하는 방법에 대한 아이디어가있다 이것을 올바르게 설정 했습니까? 미리 감사드립니다.
중복? http://stackoverflow.com/questions/2712337/passing-a-where-clause-for-a-linq-to-sql-query-as-a-parameter/2712795 – Steven