2011-11-22 6 views
5

Tengo una colección de objetos de libro llamada libro. La clase Libro tiene un campo llamado Título.¿Cómo puedo verificar si hay un registro en mi colección que coincida con un criterio?

¿Hay alguna manera fácil de usar Linq (u otra) para averiguar si esa colección tiene un objeto Book con un título de "Harry"?

+0

Campo o propiedad? Sea claro de la diferencia entre los dos. – BoltClock

+0

@BoltClock si bien existe una diferencia entre los campos y las propiedades, y es posible que deba prestarse atención, en este caso particular, no habrá ninguna diferencia. – McKay

Respuesta

8

Usted puede utilizar el método Any() para esto:

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

Esto pasará a través de su colección book hasta que encuentra un libro con el "Harry" Título o el fin de su colección. Si encuentra un libro con el título correcto, deja de revisar su colección y devuelve verdadero. Si llega al final de tu colección, devuelve falso.

Editar: Tenga en cuenta, esto hace un culture-insensitive verificación de igualdad. Es posible que desee hacer un culture-sensitive uno en su lugar, dependiendo de su caso de uso.

+3

b.Title.Equals es un poco peligroso si Title es nulo ... Debería ser book.Any (b => string.Equals (b.Title, "Harry")) –

+0

@ShaunBowe Buen punto: actualicé mi respuesta. –

+0

Y también tenga cuidado si alguno de los elementos en la lista es nulo. Eso podría pasar también. – McKay

0

Para construir sobre lo que @ J.Kommer dijo, la comprobación de la cultura sensible sería algo como esto:

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