Скалярная функция в LinqToSql - PullRequest
2 голосов
/ 26 мая 2009

В ADO.Net/SQLClient я часто делал что-то вроде этого:

SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234

... и запустить его с помощью executesescalar для возврата значения count - для простой проверки, если что-то существует.

Как бы я сделал то же самое, используя LinqToSql?

Ответы [ 3 ]

6 голосов
/ 26 мая 2009
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
    DoStuff();
}

Вы также можете использовать Count().

if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
    DoStuff();
}

Но для этого требуется всегда проходить все строки, в то время как Any() может возвращаться после первой совпадающей строки, поэтому Any() может иметь лучшую производительность.

3 голосов
/ 26 мая 2009

Помните, что Linq to Sql - это отложенное выполнение, то есть запрос фактически выполняется только при доступе к коллекции. Поэтому:

var q = (from p in db.SomeTable
        where p.SomeKey == 1234
        select p).Count();

Превратится в SELECT Count () на стороне SQL вещей.

2 голосов
/ 26 мая 2009

Если вы ищете, если что-то существует, вы можете использовать любую функцию:

if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
    return true;
}

или, если вы действительно хотите узнать это число, вы можете использовать функцию where и функцию count:

context.SomeTable.Where(i=> i.SomeKey == 1234).Count();
...