简体   繁体   中英

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 ?

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.

I 'prefer' the former. It works on nullable properties too.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM