是否可以使用Linq来获取一个列表中所有列表项的总数?

29 浏览
0 Comments

是否可以使用Linq来获取一个列表中所有列表项的总数?

我们有一个简单的结构,只是一个列表的列表,就像这样...\n

var fooInfo = new List>();

\n我想知道是否有一种简单的方法可以使用LINQ返回所有内部列表中的所有项的总和。例如,如果我们有这样的情况...\nfooInfo.add(new List()); // 外部列表中的第一个列表\nfooInfo.add(new List()); // 外部列表中的第二个列表\nfooInfo.add(new List()); // 外部列表中的第三个列表\n// 在第一个内部列表中添加两个项\nfooInfo[0].add(new Foo());\nfooInfo[0].add(new Foo());\n// 在第二个内部列表中添加一个项\nfooInfo[1].add(new Foo());\n// 在第三个内部列表中添加四个项\nfooInfo[2].add(new Foo());\nfooInfo[2].add(new Foo());\nfooInfo[2].add(new Foo());\nfooInfo[2].add(new Foo());\n\n...我们将有三个列表,分别包含两个、一个和四个项目,这意味着\'Foo\'对象的总数是七个。我希望通过LINQ获取这个数字,而不是编写我们自己的循环代码并手动计算它们。\n例如。\n

var totalFoos = fooInfo.LINQToGetTotalFoos();

\n而不是....\n

int totalFoos = 0;
foreach(var childList in fooInfo)
    totalFoos += childList.Count();

0
0 Comments

Linq是.NET Framework中的一个功能强大的查询语言,它提供了一种简洁和灵活的方法来查询和操作数据。在使用Linq进行查询时,有时我们需要获取一个包含多个列表的总数量。本文将探讨如何使用Linq来解决这个问题。

问题的解决方法有两种。第一种方法是使用SelectMany和Count方法。具体代码如下:

var nbOfItems = source.SelectMany(x => x).Count();

这种方法会将所有的子列表展开,并计算它们的总数量。

第二种方法是使用Select、Count和Sum方法。具体代码如下:

var nbOfItems = source.Select(x => x.Count()).Sum();

这种方法会先计算每个子列表的数量,然后将这些数量相加得到总数量。

这两种方法都可以得到包含多个列表的总数量,但是第二种方法的性能更好。原因是第二种方法不会像第一种方法那样遍历所有的子列表。

在使用Linq的Count方法时,它会检查目标是否实现了ICollection接口,并且使用Count属性来获取数量。因此,我们可以使用List.Count方法来替代IEnumerable.Count方法,从而提高查询的性能。

如果你对Linq的Count方法的性能有更多的疑问,可以阅读这篇文章:stackoverflow.com/questions/981254/…

总结起来,我们可以使用SelectMany和Count方法,或者使用Select、Count和Sum方法来获取一个包含多个列表的总数量。其中第二种方法的性能更好。同时,我们可以使用List.Count方法来替代IEnumerable.Count方法,以提高查询的性能。

0
0 Comments

问题的出现原因是作者想要使用Linq获取一个包含多个列表的列表中所有元素的总数。解决方法是使用Enumerable.Sum方法来计算每个子列表的元素数量,并将它们相加得到总数。代码示例为:

var totalFoos = fooInfo.Sum(childList => childList.Count);

这段代码使用了Enumerable.Sum方法,该方法会对输入序列中的每个元素调用一个转换函数,然后计算这些转换后的Int32值的总和。作者还提到可以使用SelectMany方法来解决这个问题,但性能可能会稍差。最后,作者承认自己在提问时没有想到这么简单的解决方法,并且感到有点尴尬。

0