我已使用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来做到这一点,而不必遍历每个组来迭代计数器?
答案 0 :(得分:1)
最简单的方法就是Sum
。
groupsOfFruits.Sum(group => group.Count());
可能有一天,您将只需要计算不同的水果(如果某些水果可能属于不同的组)。那会有点困难。
groupsOfFruits.SelectMany(group => group)
.Distinct()
.Count();
SelectMany
将您的分组变量“转换”为简单行IEnumarable
,您可以将其用作通用列表。