2013-01-22 11 views
5

Ho una collezione di oggetti che hanno un JobCode che è un valore stringa. Abbiamo una regola aziendale che dice che all'interno della raccolta non dovremmo mai avere più di 4 elementi il ​​cui JobCode è lo stesso. Sto lottando con questo perché di solito sto confrontando alcuni valori noti esterni all'elenco piuttosto che confrontando l'elenco con se stesso.Linq per determinare se un valore si verifica più di x numero di volte

Qualsiasi aiuto molto apprezzato.

risposta

17

È possibile identificare i lavori cattivi con:

Jobs.GroupBy(j => j.JobCode).Where(g => g.Count() > 4) 

Non è chiaro quale azione correttiva si desidera prendere ...

+0

Ah, era la parte groupby che mi mancava che sembra fare una sottocompilazione per applicare critera a. Grazie (4 minuti rimasti per accettare) – deanvmc

6

Si potrebbe utilizzare GroupBy sulla raccolta e di Count sui gruppi liberati:

var jobCodesWithMoreThanFourOccurences = collection.GroupBy(x => x.JobCode) 
                .Where(x => x.Count() > 4) 
                .Select(x => x.Key); 

Il Key selezioniamo alla fine è la proprietà abbiamo usato come una chiave nella GroupBy, vale a dire che conterrà il JobCode.

5

Si potrebbe gruppo dalla vostra proprietà di stringa, quindi verificare se c'è qualche gruppo con più di 4 elementi:

bool test = jobs.GroupBy(z => z.MyString).Any(z => z.Count() > 4); 
Problemi correlati