EF 4.1 / LINQ到SQL:什么是更好的:使用相等于或==? [英] EF 4.1 / Linq-to-SQL: What is better: using Equals or ==?

查看:175
本文介绍了EF 4.1 / LINQ到SQL:什么是更好的:使用相等于或==?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们遇到了关于使用等于或在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆