Скалярная функция в LinqToSql
-
06-09-2019 - |
Вопрос
В ADO.Net/SQLClient Я бы часто делал что-то подобное:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
...и запустите его, используя executescalar, чтобы вернуть значение count - для простой проверки, существует ли что-то.
Как бы я сделал то же самое, используя LinqToSql?
Решение
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
Вы также могли бы использовать Count()
.
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
Но для этого требуется всегда проходить по всем строкам, пока Any()
может вернуться после первой совпадающей строки - так Any()
возможно, у него будет лучшая производительность.
Другие советы
Помните, что Linq to Sql - это отложенное выполнение, что означает, что запрос фактически выполняется только при обращении к коллекции.Следовательно:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
Превратится в SELECT Count() на стороне SQL.
Если вы хотите узнать, существует ли что-то, вы можете использовать функцию any:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
или, если вы действительно хотите узнать это количество, вы можете использовать функцию where и функцию count:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();