Is it possible to use Linq to get a total count of items in a list of lists?
我们有一个简单的结构,它只是一个列表,就像这样…
1 |
我想知道是否有一种简单的方法可以使用Linq返回内部列表中所有项目的总数。例如,如果我们有这个…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | fooInfo.add(new List<Foo>()); // First list within the outer list fooInfo.add(new List<Foo>()); // Second list within the outer list fooInfo.add(new List<Foo>()); // Third list within the outer list // Add two items to the first inner list fooInfo[0].add(new Foo()); fooInfo[0].add(new Foo()); // Add one item to the second inner list fooInfo[1].add(new Foo()); // Add four items to the third inner list fooInfo[2].add(new Foo()); fooInfo[2].add(new Foo()); fooInfo[2].add(new Foo()); fooInfo[2].add(new Foo()); |
…我们将有三个列表,分别包含两个、一个和四个项目,这意味着"foo"对象的总数是七个。这是我希望通过LINQ检索到的数字,而不必编写自己的循环代码并手动对它们进行计数。
例如
1 | var totalFoos = fooInfo.LINQToGetTotalFoos(); |
而不是。。。。
1 2 3 4 | int totalFoos = 0; foreach(var childList in fooInfo) totalFoos += childList.Count(); |
一个简单的可枚举的和就足够了。
1 | var totalFoos = fooInfo.Sum(childList => childList.Count); |
它计算通过对输入序列的每个元素调用转换函数获得的Int32值序列的总和。
您可以使用
使用
1 | var nbOfItems = source.SelectMany(x => x).Count(); |
或
1 | var nbOfItems = source.Select(x => x.Count()).Sum(); |
后者会表现得更好,因为它不会枚举所有的项目,如