visual studio que online framework consultas linq linq-to-sql

studio - linqpad sql to linq



La mejor forma de recuperar resultados de registros individuales en LINQ to SQL (6)

¿Por qué no algo así como

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);

Si consulto una tabla con una condición en el campo clave como en:

var user = from u in dc.Users where u.UserName == usn select u;

Sé que obtendré cero resultados o un resultado. ¿Debo seguir adelante y recuperar los resultados usando un for-each o hay otra forma preferida de manejar este tipo de situación?


Pruebe algo como esto:

var user = (from u in dc.Users where u.UserName == usn select u).FirstOrDefault();

El método FirstOrDefault devuelve el primer elemento de una secuencia que satisface una condición especificada o un valor predeterminado si no se encuentra dicho elemento.


También debe tenerse en cuenta que First / FirstOrDefault / Single / SingleOrDefault son el punto de ejecución de un comando LINQ a Sql. Dado que la instrucción LINQ no se ha ejecutado antes de eso, puede afectar el SQL generado (por ejemplo, puede agregar un TOP 1 al comando sql)


Usaría el método SingleOrDefault.

var user = (from u in dc.Users where u.UserName == usn select u).SingleOrDefault();


Yo usaría First () o FirstOrDefault ().

La diferencia: en First () se lanzará una excepción si no se puede encontrar ninguna fila.


Otra opción es usar Contiene (nombre de usuario) en lugar de "=="

var user = (from u in dc.UserInfo where u.Users.Contains(username) select u).SingleOrDefault();