簡體   English   中英

Lambda表達式-如何為IEnumerable中的where子句提供值 <Object> ?

[英]Lambda Expression - How to provide values to where clause from an IEnumerable<Object>?

我有一個填充有供應商對象的供應商表,其中vendorID是主鍵。 我必須找到這些供應商提供的所有產品。 由於存在很多關系,因此我在SupplierProducts之間建立了一個橋接表,其中SupplierID和productID為復合主鍵。

我使用了lambda函數來為特定供應商獲取IEnumerable<SupplierProducts> 現在,我想查詢產品表以查找IEnumerable<SupplierProducts>所有產品。 我不想使用foreach()來填充產品表,而是要使用lambda表達式之類的“ in”。

我敢肯定這一定會早點得到解決,但是不幸的是,嘗試了15分鍾之后,我仍然找不到一個明確的解決方案。 我研究了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();

您非常接近:您需要做的就是選擇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();

如果構造正確,您應該在Supplier類中具有Products的虛擬屬性

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

這樣會使您的任務更輕松:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM