Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

c# - EF 4.1 / Linq-to-SQL: What is better: using Equals or ==?

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();

or:

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

And why?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

For Linq To Sql, you want neither. Instead, use Object.Equals: .Where(b => Object.Equals(b.BoodschapID, id)

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.

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.

Apart from that, there is no difference between Equals and == in Linq To SQL that I'm aware of.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...