【问题标题】:<column> IS NULL vs <column> = NULL in LINQ to SQL generated SQL<column> IS NULL vs <column> = NULL 在 LINQ to SQL 生成的 SQL
【发布时间】:2010-09-15 08:35:54
【问题描述】:

在 ASP.NET MVC 2.0 中,我正在做类似下面的事情(具体来说,匹配基于一些值和一些 NULL 值的记录)。

var result = dataContext.Inventory
 .SingleOrDefault(x => (x.part_id == model.Part.id &&
                        x.location_id == transaction.to_location_id &&
                        x.bin_id == transaction.to_bin_id &&
                        x.project_id == transaction.project_id &&
                        x.expiration_date == inventoryToTransfer.expiration_date));

...返回null。我知道记录存在,但生成的 SQL(如果我打开 SQL Logging)是

SELECT [t0].[id], [t0].[part_id], etc...
FROM [dbo].[Inventory] AS [t0]
INNER JOIN [dbo].[Parts] AS [t1] ON [t1].[id] = [t0].[part_id]
WHERE ([t0].[part_id] = @p0) AND (([t0].[location_id]) = @p1) AND ([t0].[bin_id] = @p2) AND
([t0].[project_id] = @p3) AND ([t0].[expiration_date] = @p4)
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [5197]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [57]
-- @p2: Input BigInt (Size = 0; Prec = 0; Scale = 0) [71]
-- @p3: Input BigInt (Size = 0; Prec = 0; Scale = 0) [Null]
-- @p4: Input DateTime (Size = 0; Prec = 0; Scale = 0) [Null]

实际上不会返回任何内容,因为 = NULL 的比较不会返回任何匹配项。我在想的是这会产生 IS NULL (效果很好)。像这样……

...
([t0].[project_id] IS NULL) AND ([t0].[expiration_date] IS NULL)

我错过了什么?我相信我可以在 SQL Server 中打开 ANSI_NULLS,但这已被弃用,必须有更简单的方法。

我知道,我知道...我不应该用 NULL 值定义唯一性,但是有没有办法解决这个问题?

【问题讨论】:

  • 你确定这不是 Linq-to-SQL 吗?

标签: sql-server-2005 linq-to-sql null


【解决方案1】:

使用object.equals 帮助确保查询返回为空

http://www.brentlamborn.com/post/LINQ-to-SQL-Null-check-in-Where-Clause.aspx

将可空项的位置更改为((variable == null &amp;&amp; x.column == null) || (x.column == variable))

http://blog.linqexchange.com/index.php/how-to-use-is-null-with-linq-to-sql/

【讨论】:

  • 像魅力一样工作! -- object.Equals() 感觉有点笨拙,但它比其他任何东西都好。再说一次,这很少需要 NULL 的唯一性。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2014-04-17
相关资源
最近更新 更多