2009-09-24 5 views
10

Dites, j'ai un tableau de listes, et je veux obtenir un compte de tous les éléments dans toutes les listes. Comment calculer le compte avec LINQ? (Juste la curiosité générale ici)Quelle est la façon LINQ'ish de le faire

Voici la vieille façon de le faire:

 

List<item>[] Lists = // (init the array of lists) 
int count = 0; 
foreach(List<item> list in Lists) 
    count+= list.Count; 
return count; 
 

Comment voulez-vous que LINQify? (C syntaxe #, s'il vous plaît)

Répondre

27

Utilisez la méthode Sum():

int summedCount = Lists.Sum(l => l.Count); 
+2

vrai LINQ utiliserait: var summedCount = ... –

+7

@Travis: pas du tout. Var n'est une exigence dans aucune situation, sauf dans l'utilisation de types anonymes. Dans tous les autres cas, il est 'vrai' linq d'utiliser var ou un type fort comme le développeur le souhaite, il n'y a aucune différence pratique à toutes fins utiles. – jrista

12

J'aime @ jrista de répondre à mieux que cela, mais vous pouvez faire

int summedCount = Lists.SelectMany(x => x).Count(); 

Je voulais juste montrer l'utilisation de SelectMany en cas vous voulez faire d'autres choses avec une collection de collections.

+2

Belle façon de décrire SelectMany. +1 – jrista

4

Et si vous voulez être fantaisie

int summedCount = Lists.Aggregate(0, (acc,list) => acc + list.Count); 

Mais la première réponse est sans aucun doute le meilleur.

Questions connexes