2011-07-07 27 views
29

Dada una expresión LINQ de una colección de objetos 'artículos' como este:LINQ Seleccione Recuento distintivo en forma Lambda

var total = (from item in items select item.Value).Distinct().Count() 

¿Es posible convertir esta opción para utilizar las funciones/lambdas LINQ:

items.Select(???).Distinct().Count() 
+0

o simplemente 'items.GroupBy (p => Valor PD) .Count()' – Slai

Respuesta

46

Utilice esta:

items.Select(i => i.Value).Distinct().Count() 
+0

Gracias - No sé cómo no lo probé eso! ¡ – Kyle

11

debe ser posible, ya que detrás de las escenas, LINQ se traduce a lambdas y tre expresión es (al menos LINQ a objetos)

En su caso, la parte ??? sería item => item.Value, es decir, para item, salida item.value. Por lo tanto, toda la expresión será

var total = items.Select(item => item.Value).Distinct().Count(); 
+3

parece 3 minutos demasiado tarde! ! – V4Vendetta

+0

Gracias, y +1 por la descripción, ¡aunque teme que Daniel te haya dado la respuesta! – Kyle