2011-12-15 10 views
8

¿Puede alguien decirme la diferencia en las siguientes dos declaraciones LINQ, por favor?LINQ - ¿Estilo de sintaxis diferente, resultado diferente?

var ChkUnique = DB.BusinessFile.FirstOrDefault(c => c.ROCNo == txtBoxID.Text); 

y

var ChkUnique = from c in DB.BusinessFile 
       where c.ROCNo == (string)txtBoxID.Text 
       select c; 

ChkUnique != null vuelve false de la parte superior uno cuando un partido no se puede encontrar y true para estos últimos y no puedo entender por qué esto está ocurriendo.

Soy nuevo en LINQ, así que podría haberme perdido algo realmente básico, pero me está volviendo loco en este momento.

+0

Tenga en cuenta que puede hacer que el segundo sea equivalente al primero como este: 'var ChkUnique = (desde c en DB.BusinessFile donde c.ROCNo == (cadena) txtBoxID.Text seleccione c) .FirstOrDefault();' – phoog

Respuesta

10

El segundo código devuelve un objeto que representa la consulta a la que llama; nunca será nulo. Aunque una vez enumerado, podría ser una colección vacía. (aún no es nulo, sin embargo)

La primera es llamar a FirstOrDefault, que está forzando un único resultado en una sola variable, devolviendo nulo si no hay resultados. Si lo hizo Where en lugar de FirstOrDefault, tendría el mismo resultado en ambas ocasiones.

+1

¡Gracias! Gracias :) – Permas

+1

También si finaliza el último con el mismo '(de c en DB.BusinessFile donde c.ROCNo == (cadena) txtBoxID.Text seleccione c) .FirstOrDefault()'. ¡Elija después de la legibilidad! – Independent

1

La primera afirmación está usando Extension Method y la segunda es LINQ Query Expression.

En sus primeros métodos FirstOrDefault, devuelve el primer elemento de una secuencia, o un valor predeterminado si la secuencia no contiene elementos. Aquí está trabajando en objetos por lo que su devolución predeterminada es NULL si su resultado no contiene ningún elemento.

Por otro lado, su segunda declaración siempre devuelve IEnumerable<T> valor de tipo de colección y nunca se anulará. solo puede verificar si la colección contiene elementos usando la propiedad Count de la Colección.

Si utiliza el método de extensión .Where() en su primera declaración, será equivalente a la segunda.

Consulte los enlaces especificados para obtener información detallada y las diferencias.

Cuestiones relacionadas