LINQ to实体比较集合

时间:2011-11-08 23:46:12

标签: c# .net linq asp.net-mvc-3

我遇到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进行比较。

需要任何建议或澄清吗?

2 个答案:

答案 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..