Linq to sql 查询结果我应该使用Count()还是Any()呢

Linq to sql 查询结果我应该使用Count()还是Any()呢,linq-to-sql,count,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;

我正在通过此存储库方法检查用户的登录

  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()
会更快。。。我应该用哪一种?任何建议……

您可以将其表达得简短一些,如下所示:

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

你可以把它表达得短一点,像这样:

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

两个调用之间生成的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的另一种情况下,Any更可取,因为第二个查询允许sql server缩短搜索,因为它只需要找到一个来证明存在任何查询。

两个调用之间生成的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可能是唯一的索引,所以只能有一个结果。在count可以大于1的另一种情况下,Any更可取,因为第二个查询允许sql server缩短搜索,因为它只需要找到一个来证明任何存在。

@Pandiya Chendur我怀疑您是否会看到
Any()
count()==0
之间的性能差异。毕竟,生成的sql语句将不得不检查是否存在这样或那样的记录?如果它说
return是否有任何用户使用此电子邮件并通过
,而不是
return是否有此电子邮件并通过的用户数不是0
,那么理解起来肯定更简单。正如Mike指出的,
Count
vs
any
生成的SQL将不同。@R0MANARMY是的,不同,但我怀疑他们有不同的执行计划。@Pandiya Chendur我怀疑你是否会看到
any()
Count()==0
之间的性能差异。毕竟,生成的sql语句将不得不检查是否存在这样或那样的记录?如果它说
return是否有任何用户使用此电子邮件并通过
,而不是
return是否有此电子邮件并通过的用户数不是0
,那么理解起来肯定更简单。正如Mike指出的,
Count
vs
any
生成的SQL将不同。@R0MANARMY是的,不同,但我怀疑他们有不同的执行计划。