在实体框架中,有何不同:
db.Table.Where(filter).FirstOrDefault()
或
db.Table.FirstOrDefault(filter)
我猜第一个先应用过滤器,然后取第一个记录。第二个从表中获取所有记录,然后应用过滤器,效率更低。如果这是正确的,或者两者是否相同,你能否证实我?
祝你好运
答案 0 :(得分:7)
没有。它们是等价的。
但是,一般情况下,您应该将链接保持在最低限度。因此,第二个被认为是“正确的”。
答案 1 :(得分:4)
这两个在内存和EF中具有相同的性能。
在记忆中,第一个懒惰地获得结果,所以它并不比第二个慢得多。
在EF或LINQ2SQL中,查询完全转换为SQL,因此在两个实例中只从数据库中选择一个结果。要查看发生了什么,enable SQL logging in EF,并观察生成的SQL是否相同。
但是,具有单独Where
的代码更适合输入,因此第二种形式是首选。