Linq表达式获取IList中的所有项目,其中一个字段位于另一个列表中

时间:2011-09-22 19:08:08

标签: c# linq

此集合包含整个产品数据库:

IList<Products> allProducts;

这仅包含该用户的所有产品的guid:

IList<Guid> usersProducts;

下面是我需要的伪代码,即IList中给定用户的所有产品类,产品的类型也是== 1.

var filteredProducts = (p from allProducts
                       where p.Id in usersProducts && p.Type == 1).List();

我无法弄清楚如何进行SQL查询“WHERE IN(...,...,)

3 个答案:

答案 0 :(得分:7)

var filteredProducts = (from p in allProducts
                            where usersProducts.Contains(p.Id) && p.Type == 1
                            select p).ToList();

答案 1 :(得分:2)

@ Samich的回答是正确的。这只是个人偏好,但我更喜欢方法语法...

var filteredProducts = allProducts.Where(p => p.Type == 1 && userProducts.Contains(p.Id)).ToList();

另外,出于性能原因,我交换了条件的顺序。如果p.Type不等于1,则Contains将不会执行。

答案 2 :(得分:0)

听起来你只想加入。

var filteredProducts = (from p in allProducts 
                       join u in usersProducts on p.Id equals u.Id
                       where p.Type == 1
                       select p).ToList();