在ASP.NET MVC 2.0中我正在做类似于下面的内容(具体来说,匹配基于某些值的记录以及一些NULL值)。<column> IS NULL vs <column> =在LINQ to SQL生成SQL中的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日志)是
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到SQL? – 2010-09-15 00:09:12
对不起 - 是的。它是。 – 2010-09-15 00:11:15