关于.net:FirstOrDefault(),SingleOrDefault(),Any()等……哪一个是最快的?

FirstOrDefault(), SingleOrDefault(), Any(), etc… Which One Is The Fastest?

在两个以上regards和/或其他方法包括,如果你在搜索一条记录,记录是否一只,这将是一fastest perform吗?例如,我想确保这一次它的价值被认定queried,我在寻找一个好的回报,将网络中的搜索通没有剩余的记录。


如果你想一想,你可能会想出来的。

FirstOrDefault枚举集合,直到找到匹配项为止。

SingleOrDefault枚举整个集合,以确保该项恰好发生一次

这意味着SingleOrDefault不能比FirstOrDefault快。但它确实稍微依赖于查询提供者的实现

编辑:

任何一个都可以更快地实现。协调SQL实现:

1
Select Top 1 from myTable //(its not quite this but this implementation but it will be similar)

执行速度将超过:

1
Select Top 1 from myTable where <somecondition>


只有当您希望在结果为0或多个时强制执行异常时,才应使用single(和singleOrDefault)。典型的SQL实现是

1
Select Top 2 * from table

另一方面,第一次匹配后通常会短路。在TSQL

1
Select Top 1 * from table

Any用于指示是否找到至少一个匹配项(找到后短路)。在TSQL中,它使用exists。

在您的情况下,由于您需要结果值,所以在单独发出请求(使用any)然后执行single时没有任何用处。相反,只需使用first或default,然后检查返回结果是否为空。

1
2
3
var foo = table.FirstOrDefault(t => t.bar == val);
if (null != foo)
   ...

从存在的表中选择1