2011-12-05 16 views
7

Utilizzando .NET LINQ, mi piacerebbe trovare le voci (Nome) che iniziano con PID uguale a 0 o 1. Ma se il Nome ha entrambe, voglio solo 0. Nel seguente :Come trovare la prima occorrenza con LINQ

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

tornerò righe:

0 P1 
1 P3 
0 P4 
0 P5 

I valori PID può arrivare fino a 10. Eventuali suggerimenti su come questo può essere fatto?

risposta

11

È possibile utilizzare:

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

Perché non funziona solo FirstOrDefault()? – 4thSpace

+0

Nella lista dei gruppi esiste sicuramente un membro, quindi Firs() è molto leggibile. –

+0

@ 4thSpace FirstOrDefault restituirà un singolo elemento. GroupBy lo fa raggruppare per elementi specifici, quindi si restituisce il primo elemento di ogni gruppo. Potresti usare FirstOrDefault invece di First sopra, ma il gruppo fa già un filtraggio, quindi il default non accadrà mai ... –

0

Alla fine della dichiarazione di aggiungere ".FirstOrDefault()"

+0

fa la parte uguale solo bisogno di essere 'dove PID == 0 || PID == 1 '? – 4thSpace

Problemi correlati