2012-06-02 27 views
0

以下两个查询之间是否存在任何性能差异?Linq以SQL最快的方式检索单个记录

CustomerProduct customerProduct = db.CustomerProducts.SingleOrDefault(p => object.Equals(p.Customer, this)); 

CustomerProduct customerProduct = (from p in db.CustomerProducts where object.Equals(p.Customer, this) select p).SingleOrDefault(); 

也许还有另一个,甚至更快?

+1

你试过比较实际的SQL查询吗? – Snowbear

回答

1

就编译而言,它们应该编译成相同的代码; Linq只是编译器会为你解释的语法糖。也就是说,并不是所有的linq查询都会按照您期望的方式进行编译,无论您应该总是使用ObjectQuery cast + ToTraceString方法检查生成的sql。

+1

或者如果您使用的是SqlServer,则可以使用Sql Profiler来检查发送的查询。 – Skyrim

+0

这意味着比较表A中某行的属性从表B检索行将与使用给定属性对这些表进行连接相同吗? 我有这样的事情,我需要在不久的将来实现,并在想:“哦,我将不得不为这个查询编写SQL,因为在这两个表上循环将效率低下。” – evanmcdonnal

+1

@evanmcdonnal嗯...我不确定我是否理解你的意思。让我试着以这种方式回答:如果你正在制作一个实际的sql查询并且它涉及到一个连接,那么你可以(在大多数情况下)将它转换成包含那个(innner/outer)连接的linq查询。这样你就不必在记忆中进行比较。 – Skyrim

相关问题