在 ADO.Net/SQLClient 我经常会做这样的事情:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
...并使用 executescalar 触发它以返回 count 的值 - 用于简单检查是否存在某些东西。
我将如何使用 LinqToSql 做同样的事情?
在 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();
将在 SQL 方面变成一个 SELECT Count() 。
如果您想查看是否存在某些东西,您可以使用 any 函数:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
或者如果您真的想知道该计数,您可以使用 where 函数和 count 函数:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();