Lambda表达式 - 如何为IEnumerable <object>中的where子句提供值?

时间:2016-08-31 01:39:12

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

我的供应商表中填充了供应商对象,supplierID是此处的主键。我找到了这些供应商提供的所有产品。由于存在许多关系,因此我在SupplierProducts之间建立了一个桥接表,其中supplierID和productID作为复合主键。

我已经使用lambda函数为特定供应商获取IEnumerable<SupplierProducts>。现在,我想查询产品表以查找IEnumerable<SupplierProducts>中的所有产品。我不想使用foreach()填充产品表,而是使用&#39; in&#39;像lambda表达式。

我确信这一定早已得到回答,但遗憾的是,在尝试了十五分钟后,我找不到明确的解决方案。我已查看contains()any()函数。这是我的代码:

IEnumerable<SupplierProducts> supplierProducts = db.SupplierProducts.Where(w => w.SupplierID == supplierID).ToList();
IEnumerable<Products> products = db.Products.Where(w => w.ProductID.contains(supplierProducts.productID)).ToList();

2 个答案:

答案 0 :(得分:6)

您非常接近:您需要做的就是选择ID,然后使用Contains,如下所示:

var supplierProductIds = db.SupplierProducts
    .Where(w => w.SupplierID == supplierID)
    .Select(p => p.productID)
    .ToList(); // You could get better performance without ToList
IEnumerable<Products> products = db.Products
    .Where(w => supplierProductIds.Contains(w.ProductID))
    .ToList();

答案 1 :(得分:0)

如果您已正确构建模型,则应具有“供应商类”中的“产品”的虚拟属性

public virtual ICollection<Product> Products {get; set;}

这会让您的工作变得更轻松:

 db.Suppliers.Where(s => s.Id == supplierID).Select(s => s.Products)