EF 4.1 / LINQ到SQL:什么是更好的:使用相等于或==? [英] EF 4.1 / Linq-to-SQL: What is better: using Equals or ==?
问题描述
我们遇到了关于使用等于
或在LINQ查询一个int比较的讨论 ==
。我们使用EF4.1 $ C C首先$。什么是好?
We're having a discussion about using Equals
or ==
on an int comparison in a LINQ query. We're using EF4.1 Code First. What is better?
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:。凡(B =>的Object.Equals(b.BoodschapID,ID)
For Linq To Sql, you want neither. Instead, use Object.Equals: .Where(b => Object.Equals(b.BoodschapID, id)
为什么呢?因为在SQL生成一个Bug,如果ID恰好是一个可空的唯一标识符。如果使用b.BoodschapID.Equals(ID)或b.BoodschapID == ID和b.BoodschapID恰好是一个可空的Guid,生成的SQL不会,其中BoodschapID IS NULL
而,其中BoodschapID = @ P0
这将不会返回任何结果。
Why? Because of a Bug in the SQL Generator if id happens to be a nullable uniqueidentifier. If using b.BoodschapID.Equals(id) or b.BoodschapID == id and b.BoodschapID happens to be a nullable Guid, the generated SQL will not be WHERE BoodschapID IS NULL
but rather WHERE BoodschapID = @p0
which will not return any results.
我知道肯定EF曾经有过同样的问题。不知道它是否解决了呢。你可以找到更多的细节在这个问题上,只是知道一些答案产生可怕的SQL。
I know for sure that EF used to have the same bug. No idea if it's solved yet. You can find more details in this question, just be aware that some of the answers generate horrendous SQL.
除此之外,还有Equals和== Linq中之间没有区别SQL,我是知道的。
Apart from that, there is no difference between Equals and == in Linq To SQL that I'm aware of.
这篇关于EF 4.1 / LINQ到SQL:什么是更好的:使用相等于或==?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!