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和==之间没有区别。
我更喜欢’前者’。 它也适用于可空属性。