2011-11-12 73 views
3

我們正在討論在LINQ查詢中對int比較使用Equals==。我們使用EF4.1 Code First。什麼是更好的?EF 4.1/Linq-to-SQL:什麼更好:使用Equals還是==?

var query = context.Boodschappen 
        .Where(b => b.BoodschapID == id).FirstOrDefault(); 

或:

var query = context.Boodschappen 
        .Where(b => b.BoodschapID.Equals(id)).FirstOrDefault(); 

而且爲什麼

回答

9

對於Linq To Sql,你既不需要。相反,使用Object.Equals:.Where(b => Object.Equals(b.BoodschapID, id)

爲什麼?由於SQL生成器中存在一個Bug,因此如果id恰好是可空的唯一標識符。如果使用b.BoodschapID.Equals(id)或b.BoodschapID == id和b.BoodschapID恰好是可以爲空的Guid,則生成的SQL不會是WHERE BoodschapID IS NULL,而是WHERE BoodschapID = @p0,它不會返回任何結果。

我確定EF知道有同樣的錯誤。不知道它是否解決了。你可以找到更多的細節in this question,只是要知道一些答案會產生可怕的SQL。

除此之外,在我意識到的Linq To SQL中Equals和==之間沒有區別。

+0

該錯誤似乎只存在於EF中。我一直使用Linq2SQL,沒有問題。 – leppie

+0

@leppie當我遇到與.net 4.0上的Linq To SQL完全相同的問題時,我偶然發現了它:(請參閱鏈接的問題。 –

+0

有趣的。從來沒有這個問題。什麼方可空? – leppie

0

我更喜歡前者。它也適用於可空屬性。

相關問題