2011-12-05 10 views
7

Usando .NET LINQ, me gustaría encontrar entradas (Nombre) que comiencen con PID igual a 0 o 1. Pero si el Nombre tiene ambas, solo deseo 0. En los siguientes :Cómo encontrar la primera aparición con LINQ

PID Name 
0 P1 
1 P1 
1 P3 
0 P4 
0 P5 
1 P5 

voy a volver filas:

0 P1 
1 P3 
0 P4 
0 P5 

Los valores PID pueden llegar hasta los 10. ¿Alguna sugerencia de cómo se puede hacer esto?

Respuesta

11

Usted puede utilizar:

var results = collection 
       .Where(item => item.PID == 0 || item.PID == 1) 
       .GroupBy(item => item.Name) 
       .Select(g => g.OrderBy(item => item.PID).First()); 
+0

¿Por qué no funciona FirstOrDefault() solo? – 4thSpace

+0

En la lista de grupos, sin duda, un miembro existe, por lo que Firs() es muy legible. –

+0

@ 4thSpace FirstOrDefault devolverá un solo elemento. El GroupBy hace que se agrupe por elementos específicos, por lo que devuelve el primer elemento de cada grupo. Podría usar FirstOrDefault en lugar de First arriba, pero el grupo ya hace un filtrado, por lo que el valor predeterminado nunca ocurrirá ... –

0

Al final del comunicado añadir ".FirstOrDefault()"

+0

¿La parte igual sólo tiene que ser ', donde PID == 0 || PID == 1 '? – 4thSpace

Cuestiones relacionadas