2011-11-22 13 views
5

Ho una raccolta di oggetti Libro chiamati libro. La classe Book ha un campo chiamato Title.Come posso verificare se c'è un record nella mia collezione che corrisponde a un criterio?

C'è un modo semplice con Linq (o altro) per scoprire se quella raccolta ha un oggetto Libro con un titolo di "Harry"?

+0

campo o della proprietà? Sii chiaro della differenza tra i due. – BoltClock

+0

@BoltClock mentre c'è una differenza tra campi e proprietà, e potrebbe essere necessario prestare attenzione, in questo caso particolare, non ci sarà differenza. – McKay

risposta

8

È possibile utilizzare il metodo Any() per questo:

book.Any(b => string.Equals(b.Title, "Harry")); 

Questo passerà attraverso la vostra collezione book finché non trova un libro dal titolo "Harry" o alla fine della vostra collezione. Se trova un libro con il titolo corretto, smette di attraversare la tua raccolta e restituisce true. Se raggiunge la fine della tua collezione, restituisce false.

Modifica: Si prega di notare, questo fa un controllo di uguaglianza culture-insensitive. Potresti voler fare uno culture-sensitive in base al tuo caso d'uso.

+3

b.Title.Equals è un po 'pericoloso se Title è nullo .. Dovrebbe essere book.Any (b => string.Equals (b.Title, "Harry")) –

+0

@ShaunBowe Buon punto - aggiornato la mia risposta. –

+0

E attenzione anche se uno qualsiasi degli elementi nell'elenco è nullo. Potrebbe anche succedere. – McKay

0

Per costruire su ciò che @ J.Kommer detto, il controllo sensibile cultura sarebbe simile a questa:

book.Any(b => string.Compare(b.Title, "Harry", CultureInfo.CurrentCulture, 
    CompareOptions.None) == 0); 
Problemi correlati