LINQ到实体比较集合

本文关键字:集合 比较 实体 LINQ | 更新日期: 2023-09-27 18:13:47

我有一个Linq查询的问题,实际上会做什么我需要它。我构造了一个需要在数据库(实体框架)中查找文章的搜索,然后搜索使用复选框列表,允许用户仅在某些实践领域内搜索。我看过一些关于linq join的帖子;多个集合,但我的问题是,我想要选择的是父表文章,我需要比较。Practices和我从复选框列表中编译的Practices列表。

在它是一个复选框列表之前,它是一个下拉列表,这个查询工作搜索1实践:

ar = (from a in db.Articles
      from p in a.Practices
      where p.ID == practiceID
      select a);

现在,我需要where子句像常规SQL中的"IN"一样工作。我从复选框列表中编译的实践集合需要与db.Articles.Practices进行比较,以便进行搜索。

需要什么建议或澄清吗?

LINQ到实体比较集合

假设:List practicseids

ar = (from a in db.Articles
  from p in db.Practices
  where practiseIds.Contains(p.ID)
  select a);

但是需要澄清一下:

IN不是EF中支持的第一类SQL方法,所以上面的代码实际上会变成一个or的列表(这可能已经在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..

将id集合作为数组practiceIds传递,并使用Contains()查询:

ar = (from a in db.Articles
      from p in a.Practices
      where practiceIds.Contains(p.ID)
      select a);