función escalar en LinqToSql
-
06-09-2019 - |
Pregunta
En ADO.Net/SQLClient menudo me gustaría hacer algo como esto:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
... y el fuego usando ExecuteScalar para devolver el valor de recuento -. Para una sencilla comprobación si algo existe
¿Cómo voy a hacer lo mismo usando LinqToSql?
Solución
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
También es posible usar Count()
.
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
Pero esto requiere siempre que pasar por todas las filas, mientras que Any()
puede regresar después de la primera fila coincidente -. Any()
así podría tener un mejor rendimiento
Otros consejos
Recuerde, LINQ to SQL es ejecución diferida, es decir, la consulta sólo ejecuta realmente cuando acceda a la colección. Por lo tanto:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
se convertirá en un SELECT Count () en el lado de SQL de las cosas.
Si usted está mirando para ver si existe algo que se puede utilizar el cualquier función:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
o si realmente quiere saber que la cuenta puede utilizar la función de dónde y la función de cuenta:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();