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

标签 c# .net linq entity-framework linq-to-sql

我们正在讨论在 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 恰好是可为 null 的唯一标识符,则由于 SQL 生成器中的错误。如果使用 b.BoodschapID.Equals(id) 或 b.BoodschapID == id 并且 b.BoodschapID 恰好是可为空的 Guid,则生成的 SQL 将不是 WHERE BoodschapID IS NULL 而是 WHERE BoodschapID = @p0 不会返回任何结果。

我确信 EF 曾经有过同样的错误。不知道它是否已经解决了。您可以找到更多详细信息 in this question ,请注意某些答案会生成可怕的 SQL。

除此之外,据我所知,Linq To SQL 中的 Equals 和 == 没有区别。

关于c# - EF 4.1/Linq-to-SQL : What is better: using Equals or ==?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105732/

相关文章:

c# - Process.WaitForExit() 异步

c# - Linq to Xml 仅打印第一个后代值

c# - Linq如何正确使用where

c# - 将 Canvas 大小调整为相邻标签的文本高度

c# - 使用派生类的实例时如何序列化基类?

.net - WPF,你能得到默认的窗口颜色吗?

.net - 带有受控自动换行的图形抽绳

c# - 在 C# 中用常量乘/加大量数字的高性能方法是什么?

c# - 覆盖仅在 C# 中测试所需的 Equals 和 GetHashcode 方法的最佳位置

c# - LINQ to Entities 无法识别方法 'System.Collections.Generic.Dictionary` 2[System.Int32,System.String] ToDictionary