Вопрос

В 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top