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

SJa*_*aka 1 c# linq asp.net-mvc lambda

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

我已经使用lambda函数来获得IEnumerable<SupplierProducts>特定供应商.现在,我想查询产品表以查找所有产品IEnumerable<SupplierProducts>.我不想使用a foreach()来填充products表,而是使用'in'之类的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();
Run Code Online (Sandbox Code Playgroud)

das*_*ght 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();
Run Code Online (Sandbox Code Playgroud)