funzione scalare in LINQ to SQL
-
06-09-2019 - |
Domanda
In ADO.Net/SQLClient mi capitava spesso fare qualcosa di simile:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
... e il fuoco utilizzando ExecuteScalar per restituire il valore di conteggio -. Per un controllo semplice, se qualcosa esiste
Come avrei fatto lo stesso con LinqToSql?
Soluzione
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
Si potrebbe anche usare Count()
.
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
Ma questo richiede sempre di passare attraverso tutte le righe, mentre Any()
può ritornare dopo la prima riga corrispondente -. Così Any()
potrebbe avere prestazioni migliori
Altri suggerimenti
Ricordate, LINQ to SQL è esecuzione differita, il che significa, la query solo in realtà viene eseguito quando si accede alla raccolta. Pertanto:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
si trasformerà in un conte SELECT () sul lato SQL delle cose.
Se stai cercando di vedere se qualcosa esiste è possibile utilizzare la funzione di qualsiasi:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
o se si vuole realmente sapere che conta è possibile utilizzare la funzione di dove e la funzione di conteggio:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();