查询结果我应该使用Count()或Any()

时间:2010-05-18 11:57:02

标签: linq-to-sql count

我正在通过此存储库方法

检查用户的登录
  public bool getLoginStatus(string emailId, string password)
    {
        var query = from r in taxidb.Registrations
                    where (r.EmailId == emailId && r.Password==password)
                    select r;
        if (query.Count() != 0)
        {
            return true;
        }
        return false;
    }

我在之前的一个问题中看到!query.Any()会更快......我应该使用哪个?任何建议......

2 个答案:

答案 0 :(得分:4)

两个调用之间生成的sql会有所不同。您可以通过将context.Log属性设置为Console.Out或其他东西进行检查。

以下是它的内容:

SELECT COUNT(*) AS [value]
FROM [dbo].[Registrations] AS [t0]
WHERE [t0].[EmailId] = @p0 and [t0].Password = @p1

SELECT 
    (CASE 
        WHEN EXISTS(
            SELECT NULL AS [EMPTY]
            FROM [dbo].[Registrations] AS [t0]
            WHERE [t0].[EmailId] = @p0 and [t0].Password = @p1
            ) THEN 1
        ELSE 0
     END) AS [value]

在这种情况下,我怀疑它会有什么不同,因为EmailID可能是一个唯一的索引,因此只能有1个结果。在另一种情况下,计数可以> 1,任何会更好,因为第二个查询允许sql server短路搜索,因为它只需要找到一个来证明任何存在。

答案 1 :(得分:2)

你可以用这样的方式表达它:

return taxidb.Registrations.Any(r => r.EmailId == emailId && r.Password==password);