我有一个EF查询,它从数据库中获取产品。
var query = (from pPrice in db.ProductPricing
join prod in db.Products on pPrice.ProductID equals prod.ProductID
join productExt in db.ProductsExt on prod.ProductID equals productExt.ProductID into pExts
from prodExt in pExts.DefaultIfEmpty()
where (includeNonPublic || pPrice.ShowOnline == 1)
&& ((eventID.HasValue && pPrice.EventID == eventID) || (!eventID.HasValue && !pPrice.EventID.HasValue))
orderby prod.DisplayOrder
select new ProductPricingInfo()
{
Product = prod,
ProductPricing = pPrice,
ProductExtension = prodExt
});
我有一张桌子,我可以指定附加产品(一旦购买了父项,就可以购买的产品)。
我提取这些附加产品的查询是
var addOnProductsQuery = (from pa in db.ProductAddons
where pa.EventID == eventID && pa.StatusID == 1
select new { ProductID = pa.ChildProductId });
现在我要做的是过滤查询变量,只返回不在addOnProductsQuery结果中的产品。
目前我有
var addOnProducts = addOnProductsQuery.ToList();
query = query.Where(e => !addOnProducts.Contains(e.Product.ProductID));
但是Contains(e.Product.ProductID)语句中存在语法错误
答案 0 :(得分:0)
Chetan在评论中是正确的,您需要在使用Contains
之前从对象中选择整数。
您可以通过两种方式实现:
首先你可以先取整数:
var addOnProductsQuery = (from pa in db.ProductAddons
where pa.EventID == eventID && pa.StatusID == 1
select new pa.ChildProductId);
这应该为int
提供类型,以便您以后可以使用Contains
而没有任何问题。
其次,如果你想保持addOnProductsQuery不变:
var addOnProducts = addOnProductsQuery.Select(a => a.ProductID).ToList();
query = query.Where(e => !addOnProducts.Contains(e.Product.ProductID));