EF 4.1 / Linq-to-SQL:什么是更好的:使用Equals或==?

我们正在讨论在LINQ查询中对int比较使用Equals== 。 我们正在使用EF4.1 Code First。 什么是更好的?

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

要么:

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

为什么

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

为什么? 如果id恰好是一个可以为空的uniqueidentifier,那么SQL Generator中会出现Bug。 如果使用b.BoodschapID.Equals(id)或b.BoodschapID == id和b.BoodschapID恰好是一个可以为空的Guid,生成的SQL将不会是WHERE BoodschapID IS NULL而是WHERE BoodschapID = @p0这将不会返回任何结果。

我确信EF曾经有同样的错误。 不知道它是否已经解决了。 你可以在这个问题中找到更多细节,只要知道一些答案会产生可怕的SQL。

除此之外,在我知道的Linq To SQL中,Equals和==之间没有区别。

我更喜欢’前者’。 它也适用于可空属性。