我的供应商表中填充了供应商对象,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();
答案 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)