2009-09-24 10 views
10

Digamos, tengo una serie de listas, y quiero obtener un recuento de todos los elementos en todas las listas. ¿Cómo calculo el conteo con LINQ? (Solo la curiosidad general, aquí)¿Cuál es la forma LINQ'ish de hacer esto

Aquí está la vieja manera de hacerlo:

 

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

¿Cómo usted tienen que LINQify? (# Sintaxis de C, por favor)

Respuesta

27

Uso del Sum() método:

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

verdadero LINQ usaría: var summedCount = ... –

+7

@Travis: en absoluto. Var no es un requisito en ninguna situación excepto en el uso de tipos anónimos. En todos los demás casos, es 'verdadero' linq usar var o un tipo fuerte, según el desarrollador lo desee, no existe una diferencia práctica para todos los intentos y propósitos. – jrista

12

me gusta @ de jrista responder mejor que esto, pero se podía hacer

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

Sólo quería mostrar el uso SelectMany en el caso Quieres hacer otras cosas con una colección de colecciones.

+2

Una buena manera de describir a SelectMany. +1 – jrista

4

Y si quieres ser de lujo

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

Pero la primera respuesta es sin duda la mejor.

Cuestiones relacionadas