4

关于上述和/或包括其他方法,如果您正在搜索一条记录,并且只有一条记录存在,那么哪一个会执行得最快?例如,我想确保一旦它找到正在查询的值,我正在寻找一个会立即返回它而不搜索剩余记录的值。

4

2 回答 2

15

如果你有这个想法,你可能会解决它。

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

SingleOrDefault枚举整个集合以确保项目恰好出现一次

这意味着SingleOrDefault不能比FirstOrDefault. 但它确实有点依赖于查询提供程序的实现

编辑:

Any 都可以更快地实现。考虑一个 SQL 实现:

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

执行速度将比:

Select Top 1 from myTable where <somecondition>
于 2012-06-14T23:13:49.543 回答
1

只有在有 0 个或多个结果的情况下要强制异常时,才应使用 Single(和 SingleOrDefault)。典型的 SQL 实现是

Select Top 2 * from table

另一方面,第一个通常会在找到第一个匹配项后短路。在 TSQL 中

Select Top 1 * from table

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

在您的情况下,由于您需要结果值,因此发出单独的请求(使用 Any)然后执行 Single 是没有用的。相反,只需使用 FirstOrDefault 然后检查返回结果是否为 null。

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

从存在的表中选择 1

于 2012-06-15T15:48:29.237 回答