使用linq过滤列表

时间:2011-09-30 13:28:29

标签: c# linq generic-list

作为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则不对它们进行分组。

帮助

4 个答案:

答案 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());
相关问题