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