2009-06-03 21 views
31

Tengo el siguiente problema:secuencia contiene ningún error elementos pero quiero comprobar NULL

public Boolean Exists(String userName) 
{ 
    IRepository<User> = new UserRepository(); 
    User user = userRepository.First(u => u.Name == userName); 

    if (user == null) return false; 

    // Exists! 
    return true; 
} 

El problema es ahora, que no puedo comprobar el objeto Usuario para nulo. Antes de llegar, obtengo un InvalidOperationException diciendo "La secuencia no contiene elementos".

Esto me parece realmente extraño, especialmente porque no quiero establecer un flujo de control con excepciones (por ejemplo, encapsular en try..catch y devolver verdadero/falso en las partes respectivas).

¿Qué está pasando aquí? ¿Es esto normal o hay algo mal con mi repositorio (pista ?!)

Por cierto, este código funciona perfectamente cuando el elemento que Busco existe (se recupera del usuario, etc.). Solo no funciona cuando no hay coincidencia.

Respuesta

60

Use FirstOrDefault en lugar de First. Esto devolverá nulo frente a una colección vacía.

IRepository<User> = new UserRepository(); 
User user = userRepository.FirstOrDefault(u => u.Name == userName); 
+1

@Tomas, en realidad tiene delante de usted, pero hice un post respuesta de edición para incluir en realidad un ejemplo de código. La segunda edición fue de 2 segundos detrás :) – JaredPar

+0

Eso es cierto Jared entró primero: D (por 2 segundos ... estaba mostrando a Jared 48 segundos atrás y Tomas 46 segundos atrás). ¡Gracias, señores! – Alex

+0

+1 por comentario de nananabooboo: D – Gent

22

trate de cambiar a .First().FirstOrDefault().

12

Uso .FirstOrDefault() para evitar que el error

Cuestiones relacionadas