我有这样的表达式:
var result = from pav in ProductAttributes
join id in valueIds
on pav.AttributeValueID equals id
select pav.ProductImageID;
这在一定程度上起作用。问题是,对于每个属性,集合ProductAttributes多次包含相同的产品。它的结构是:
ID-唯一
产品ID
产品属性值ID
产品图像ID
因此,一个产品可能会在集合中出现多次。我希望结果能过滤掉所有在valueId中根本没有匹配项的产品(这是一个ProductAttributeValueID列表)。
所以我只想返回具有所有组合valueId的产品,而不仅仅是其中任何一个,这就是上面linq表达式所做的。
PS如果有帮助的话,我可以发布SQL代码来展示我在SQL中的意思!
@devgeezer发布了一个非常接近的答案,但它只适用于一个值。
我最终得到了下面的代码,它很有效。我在ProductID上分组,然后在第二个查询中使用它来过滤原始集合:
var result =
from pav in ProductAttributeValues
join id in valueIds
on pav.AttributeValueID equals id
group pav by pav.ProductID into gj
where gj.Count() == valueIds.Count()
select gj.Key;
var imageIds = from pav in ProductAttributeValues
join id in result
on pav.ProductID equals id
select pav.ProductImageID;
您可以尝试以下分组和过滤方法:
var result =
from pav in ProductAttributes
join id in valueIds
on pav.AttributeValueID equals id
group pav by pav.ProductImageID into gj
where gj.Count() == valueIds.Count()
select gj.Key;