[英]Get lambda expression from where clause or IQueryable/IEnumerable
[英]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.