我遇到Linq查询的问题,实际上会做我需要它的问题。我构建了一个需要在数据库(实体框架)中查找文章的搜索,然后搜索使用复选框列表,以允许用户仅在某些练习区域内搜索。我已经看过关于linq加入& amp;多个集合,但我的问题是我尝试选择的是父表文章,我需要将.Practices与我从复选框列表中编译的实践列表进行比较。
在它是一个复选框列表之前,它是一个下拉列表,此查询用于搜索1个练习:
ar = (from a in db.Articles
from p in a.Practices
where p.ID == practiceID
select a);
现在,我需要where子句像" IN"来自常规SQL。我从一个复选框列表编译的我的实践集合需要与我的搜索的db.Articles.Practices进行比较。
需要任何建议或澄清吗?
答案 0 :(得分:2)
只需将id集合作为数组practiceIds
传入,然后使用Contains()
查询:
ar = (from a in db.Articles
from p in a.Practices
where practiceIds.Contains(p.ID)
select a);
答案 1 :(得分:2)
假设:列出practiseIds
ar = (from a in db.Articles
from p in db.Practices
where practiseIds.Contains(p.ID)
select a);
然而,需要做出一些澄清:
IN不是EF中第一类支持的SQL方法,因此上面的代码实际上会变成一个或者一个列表(这可能已经在EF的.net 4版本中得到了解决 - http://blogs.msdn.com/b/adonet/archive/2009/08/05/improvements-to-the-generated-sql-in-net-4-0-beta1.aspx)
Psuedo Code -
Select * From db.Articles
inner join db.Practices on <relation>
Where db.Practices.practiceid = @p0 || db.Practices.practiceid = @p1 || etc..