题
在ADO.Net/SQLClient我会经常做这样的事情:
SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234
...和使用的ExecuteScalar返回计数值火了 - 一个简单的检查,如果存在的东西。
我将如何做使用LinqToSql相同的?
解决方案
if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
DoStuff();
}
您也可以使用Count()
。
if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
DoStuff();
}
但是这需要总是要经过的所有行,而Any()
可以第一个匹配行后返回 - 所以Any()
可能有更好的表现。
其他提示
记住,LINQ到SQL是延迟执行,这意味着,当你访问集合的查询只实际执行。因此:
var q = (from p in db.SomeTable
where p.SomeKey == 1234
select p).Count();
会变成一个SELECT COUNT()对事物的SQL侧。
如果您想看看是否有存在,你可以使用任何功能:
if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
return true;
}
或者,如果你真的想知道那算不算你可以使用其中的功能和计数功能:
context.SomeTable.Where(i=> i.SomeKey == 1234).Count();
不隶属于 StackOverflow