Skalarfunktion in LinqToSql
-
06-09-2019 - |
Frage
In ADO.Net/SQLClient würde ich oft etwas tun, wie folgt aus:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
... und Feuer es ExecuteScalar über den Wert der Zählung zurück -. Für eine einfache Überprüfung, ob etwas existiert
Wie würde ich das gleiche mit LinqToSql tun?
Lösung
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
Sie können auch Count()
verwenden.
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
Dies erfordert jedoch immer durch alle Reihen zu gehen, während Any()
nach der ersten Trefferzeile zurückkehren können -. So Any()
könnte eine bessere Leistung haben
Andere Tipps
Denken Sie daran, Linq to Sql verzögerte Ausführung ist, was bedeutet, nur die Abfrage tatsächlich ausgeführt wird, wenn Sie die Sammlung zugreifen. Deshalb:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
wird in eine SELECT Count () auf der SQL-Seite der Dinge.
Wenn Sie schauen, um zu sehen, ob etwas existiert können Sie die jede Funktion verwenden:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
oder wenn Sie wollen wirklich, dass die Zählung wissen, die wo-Funktion und die Count-Funktion verwenden können:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();