从IEnumerable <IGrouping <TKey,TSource >> GroupBy获取所有组中所有分组项目的计数

时间:2019-10-24 05:37:08

标签: c# linq ienumerable igrouping

我已使用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 个答案:

答案 0 :(得分:1)

最简单的方法就是Sum

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

可能有一天,您将只需要计算不同的水果(如果某些水果可能属于不同的组)。那会有点困难。

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

SelectMany将您的分组变量“转换”为简单行IEnumarable,您可以将其用作通用列表。