Можно ли использовать Linq для получения общего количества элементов в списке списков?
У нас есть простая структура, которая представляет собой просто список списков, вот так...
var fooInfo = new List<List<Foo>>();
Мне интересно, есть ли простой способ использовать linq, чтобы вернуть общее количество всех элементов из внутренних списков. Например, если бы у нас было вот это...
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 вместо того, чтобы писать наш собственный циклический код и вручную подсчитывать их вверх.
Например
var totalFoos = fooInfo.LINQToGetTotalFoos();
Скорее, чем....
int totalFoos = 0;
foreach(var childList in fooInfo)
totalFoos += childList.Count();
2 ответа:
Простое Перечисляемое.Сумма была бы достаточной.
Он вычисляет сумму последовательности значений Int32, полученных путем вызова функции преобразования для каждого элемента входной последовательности.var totalFoos = fooInfo.Sum(childList => childList.Count);
Вы можете использовать
SelectMany
, но производительность этого будет лучше.