#c# #linq #generic-list
#c# #linq #общий список
Вопрос:
Будучи новичком в linq, у меня возникли проблемы при попытке применить фильтр к объекту списка. Это то, что у меня есть до сих пор
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)
Итак, в псевдокоде я хочу сгруппировать по всему продукту.FamilySku, но не группируйте их, если продукт.IsFamily != true.
Спасибо за помощь
Ответ №1:
Другие ответы работают, если вы хотите полностью исключить продукты, в которых IsFamily равно false . Но если вы хотите, чтобы они были в отфильтрованном списке, но не сгруппированы, тогда вы могли бы 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));
Может быть лучший способ сделать это, если вы не хотите менять их порядок.
Ответ №2:
Просто поместите Where()
фильтр перед группировкой:
var filter = productList.Where(p => p.Product.IsFamily)
.GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());
Ответ №3:
Похоже, вам просто нужно использовать метод Where():
var filter = productList
.Where(a => a.Product.IsFamily)
.GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());
Комментарии:
1. @ElianEbbing Я думаю, вы правы. Я хочу сгруппировать, если IsFamily и не группировать их, если IsFamily == False, но не исключать их (IsFamily == False).
Ответ №4:
productList.Where(!a.Product.IsFamily).GroupBy(a => a.Product.FamilySku)
.Select(grp => grp.OrderByDescending(a => a.Product.FamilySku).First());