【发布时间】:2012-03-28 21:09:16
【问题描述】:
我有这样的表达方式:
var result = from pav in ProductAttributes
join id in valueIds
on pav.AttributeValueID equals id
select pav.ProductImageID;
这在一定程度上起作用。问题是对于每个属性,集合 ProductAttributes 多次包含相同的产品。它的结构是:
ID - 唯一
产品编号
ProductAttributeValueID
产品图像ID
所以一个产品可能会在集合中出现多次。我希望结果实际上过滤掉所有在 valueIds (这是 ProductAttributeValueIDs 列表)中根本没有任何匹配项的产品。
所以我只想返回具有所有 COMBINED 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;
【问题讨论】:
-
您的问题有点难以理解,如果您实际发布问题中提到的所有代码部分,这将有所帮助。
-
@AdrianIftode 是的,很抱歉之前没有提到它
-
@ChibuezeOpata 抱歉,我知道,这很难解释!但我现在得到了答案,它希望能显示出我想要实现的目标。
标签: c# linq collections filter set