.Where(过滤器表达式).FirstOrDefault()和.FirstOrDefault(过滤器表达式)之间的区别

时间:2013-09-13 20:22:46

标签: c# entity-framework

在实体框架中,有何不同:

db.Table.Where(filter).FirstOrDefault()

db.Table.FirstOrDefault(filter)

我猜第一个先应用过滤器,然后取第一个记录。第二个从表中获取所有记录,然后应用过滤器,效率更低。如果这是正确的,或者两者是否相同,你能否证实我?

祝你好运

2 个答案:

答案 0 :(得分:7)

没有。它们是等价的。

但是,一般情况下,您应该将链接保持在最低限度。因此,第二个被认为是“正确的”。

答案 1 :(得分:4)

这两个在内存和EF中具有相同的性能。

在记忆中,第一个懒惰地获得结果,所以它并不比第二个慢得多。

在EF或LINQ2SQL中,查询完全转换为SQL,因此在两个实例中只从数据库中选择一个结果。要查看发生了什么,enable SQL logging in EF,并观察生成的SQL是否相同。

但是,具有单独Where的代码更适合输入,因此第二种形式是首选。