选择计数不相同的不同属性

时间:2016-04-18 11:58:10

标签: c# linq

我有以下Linq查询,它从所有产品中选择一个不同的属性列表:

products
    .SelectMany(p => p.Attributes)
    .Where(a => a.AttributeGroup.IsProductFilter)
    .Distinct()
    .ToList();

每个属性都可以分配给每个产品,所以我只想要一个属性列表,其中属性的数量少于产品的数量(因为它们用于过滤,如果它们没有变化数字相等)

我不确定如何做到这一点 - 我认为我需要使用GroupBy,但我不确定如何获取属性列表:

IEnumerable<ProductAttribute> attributes = products.SelectMany(p => p.Attributes).Where(a => a.AttributeGroup.IsProductFilter);
return attributes.GroupBy(a => a.ID)
    .Where(g => g.Count() < products.Count) // this is now an ienumarable group object so not sure how to get it back to an ienumarable attribute

或者这看起来好一点

 attributes.GroupBy(a => a)
      .Where(g => g.Count() < products.Count)
      .Select(g => g.ToList())
      .Distinct()
      .OrderBy(a => a.AttributeGroup.Order) // this doesn't work as a isn't an attribute

它可能非常简单,但我对Linq并不是那么好,所以任何帮助解决这个问题都会受到赞赏

1 个答案:

答案 0 :(得分:0)

我不确定,但SelectMany也没有帮助吗?

return attributes.GroupBy(a => a.ID)
    .Where(g => g.Count() < products.Count)
    .SelectMany(g => g);  // perhaps Distinct after