2

在 ADO.Net/SQLClient 我经常会做这样的事情:

SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234

...并使用 executescalar 触发它以返回 count 的值 - 用于简单检查是否存在某些东西。

我将如何使用 LinqToSql 做同样的事情?

4

3 回答 3

6
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
    DoStuff();
}

你也可以使用Count().

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

但这需要始终遍历所有行,同时Any()可以在第一个匹配行之后返回 - 所以Any()可能会有更好的性能。

于 2009-05-26T16:56:36.270 回答
3

请记住,Linq to Sql 是延迟执行,这意味着,只有在您访问集合时查询才会真正执行。所以:

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

将在 SQL 方面变成一个 SELECT Count() 。

于 2009-05-26T16:58:05.130 回答
2

如果您想查看是否存在某些东西,您可以使用 any 函数:

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

或者如果您真的想知道该计数,您可以使用 where 函数和 count 函数:

context.SomeTable.Where(i=> i.SomeKey == 1234).Count();
于 2009-05-26T17:01:27.213 回答