我有以下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并不是那么好,所以任何帮助解决这个问题都会受到赞赏
答案 0 :(得分:0)
我不确定,但SelectMany
也没有帮助吗?
return attributes.GroupBy(a => a.ID)
.Where(g => g.Count() < products.Count)
.SelectMany(g => g); // perhaps Distinct after