集合操作:如何根据一组合并的int筛选集合



我有这样的表达式:

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;

最新更新