2012-06-02 46 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

相關問題