2011-01-10 11 views
41

Dire che ho il seguente codice:Verificando un elenco di oggetti contiene una proprietà con un valore specifico

class SampleClass 
{ 
    public int Id {get; set;} 
    public int Name {get; set;} 
} 
List<SampleClass> myList = new List<SampleClass>(); 
//list is filled with objects 
... 
string nameToExtract = "test"; 

Quindi la mia domanda è che cosa la funzione Lista posso usare per estrarre da myList solo gli oggetti che hanno un Nome proprietà che corrisponde alla mia stringa nameToExtract.

Mi scuso in anticipo se questa domanda è molto semplice/ovvia.

risposta

67

È possibile utilizzare il metodo Enumerable.Where estensione:

var matches = myList.Where(p => p.Name == nameToExtract); 

Restituisce un IEnumerable<SampleClass>. Supponendo che si desidera un filtrato List, chiamare semplicemente .ToList() su quanto sopra.


A proposito, se dovessi scrivere il codice di cui sopra oggi, farei il controllo di uguaglianza in modo diverso, data la complessità della gestione di stringhe Unicode:

var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture)); 

See also

+0

Questo ritorno tutti gli oggetti che corrispondono 'nameToExtract'? – IAbstract

+3

In particolare, tutti gli oggetti la cui proprietà 'Name' corrisponde a' nameToExtract', sì. –

+1

thx - c'è una versione booleana che restituisce semplicemente vero o falso se esiste o non esiste? – BKSpurgeon

1
using System.Linq;  
list.Where(x=> x.Name == nameToExtract); 

Modifica: domanda errata (ora tutte le partite)

6
myList.Where(item=>item.Name == nameToExtract) 
+0

ha funzionato perfettamente. Grazie per la pronta risposta. – rybl

+0

Evviva per LINQ. –

1

Oltre alle altre risposte suggeriscono LINQ, un'altra alternativa in questo caso sarebbe quella di utilizzare il metodo FindAll esempio:

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract); 
Problemi correlati