получить количество всех сгруппированных элементов во всех группах из IEnumerable> GroupBy - PullRequest
0 голосов
/ 24 октября 2019

Я сгруппировал фрукты по определенным общим свойствам (вес, цвет и т. Д.) С помощью LINQ GroupBy,

, а затем я выполнил некоторую обработку, которая удаляет некоторые группы из этого списка IGroupings (вместе со всемифрукты в этой группе).

Теперь я хотел бы узнать (возможно, через LINQ) сумму всех фруктов, которые у меня есть во всех группах, оставшихся от процесса, который находится в этом IEnumerable> groupedFruits ..

Как мне это сделать?

Я не хочу знать, сколько у меня групп ... Но я хочу знать, сколько фруктов у меня во всех этих группах

List<Fruit> fruits = getAllKindsOfFruits(); //maybe I get 1,000 fruits here

var groupsOfFruits= fruits.GroupBy(x => new { x.color, x.weight, x.type });

//
//<some process of narrowing down here, removing some groups of fruits that are disqualified>
//

//Here I want to count how many fruits are left, regardless of which group they belong to, maybe I get //just 300 fruits as a result

Есть ли способ сделать это с помощью всего лишь LINQ и не нужно циклически проходить через каждую из групп для итерации счетчика?

1 Ответ

1 голос
/ 24 октября 2019

Самый простой способ - просто Sum.

groupsOfFruits.Sum(group => group.Count());

Может быть, когда-нибудь вам нужно будет считать только отдельные фрукты (если некоторые фрукты могут быть в разных группах). Тогда это будет немного сложнее.

groupsOfFruits.SelectMany(group => group)
              .Distinct()
              .Count();

SelectMany "конвертирует" переменную группировки в простую строку IEnumarable, которую вы можете использовать в качестве общего списка.

...