2009-09-24 19 views
10

Dire, ho una matrice di elenchi e voglio ottenere un conteggio di tutti gli articoli in tutte le liste. Come dovrei calcolare il conteggio con LINQ? (Solo curiosità generale qui)Qual è il modo LINQ per farlo

Ecco il vecchio modo di farlo:

 

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

Come faresti LINQify che? (C# sintassi, per favore)

risposta

27

Utilizzare il metodo Sum():

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

true LINQ utilizza: var summedCount = ... –

+7

@Travis: non del tutto. Var non è un requisito in nessuna situazione tranne che nell'uso di tipi anonimi. In tutti gli altri casi, è 'vero' linq usare var o un tipo forte come piace allo sviluppatore, non c'è alcuna differenza pratica a tutti gli effetti. – jrista

12

mi piace @ jrista di rispondere meglio di questo, ma si poteva fare

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

Volevo solo per mostrare l'utilizzo SelectMany nel caso in cui vuoi fare altre cose con una collezione di collezioni.

+2

Bel modo di descrivere SelectMany. +1 – jrista

4

E se si vuole essere di fantasia

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

Ma la prima risposta è sicuramente il migliore.

Problemi correlati