作为linq的新用户,我无法尝试将过滤器应用于List对象。这就是我到目前为止所拥有的
var filter = productList.GroupBy(a => a.Product.FamilySku).Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());
除非我不想应用过滤器,如果a.Product.IsFamily!= true
我想添加一个except子句:
Except(a.Product.IsFamily != true)
所以在伪代码中,我想按所有Product.FamilySku进行分组,但是如果Product.IsFamily!= true则不对它们进行分组。
帮助
答案 0 :(得分:1)
在分组前添加Where()
过滤器:
var filter = productList.Where(p => p.Product.IsFamily)
.GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());
答案 1 :(得分:1)
看起来你只需要使用Where()方法:
var filter = productList
.Where(a => a.Product.IsFamily)
.GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());
答案 2 :(得分:1)
如果您想完全忽略IsFamily为假的产品,其他答案都有效。但是如果你想要的是他们在被过滤的列表中,但没有分组,那么你可以在最后像他们一样Concat():
var filter = productList.Where(p => p.Product.IsFamily)
.GroupBy(p => p.Product.FamilySku)
.Select(grp => grp.OrderByDescending(p => p.Product.FamilySku).First())
.Concat(productList.Where(p => !p.Product.IsFamily));
如果您不想更改订单,可能有更好的方法。
答案 3 :(得分:0)
productList.Where(!a.Product.IsFamily).GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());