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