função escalar em LINQ to SQL
-
06-09-2019 - |
Pergunta
Em ADO.Net/SQLClient muitas vezes eu ia fazer algo como isto:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
... e fogo-lo usando ExecuteScalar para retornar o valor de contagem -. Para uma verificação simples, se algo existe
Como eu poderia fazer o mesmo usando LinqToSql?
Solução
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
Você também pode usar Count()
.
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
Mas isso requer sempre que passar por todas as linhas, enquanto Any()
pode retornar após a primeira linha correspondente -. Modo Any()
poderia ter melhor desempenho
Outras dicas
Lembre-se, Linq para Sql é adiada execução, o que significa, a consulta só realmente executado quando você acessar a coleção. Portanto:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
Será que se transformar em um SELECT COUNT () no lado do SQL das coisas.
Se você está procurando para ver se existe algo que você pode usar a qualquer função:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
ou se você realmente quer saber que a contagem você pode usar a função de onde e a função de contagem:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();