我有一个非常简单的查询:
变量'_dc'是实体框架代码第一数据上下文:
var maxLockTime = DateTime.UtcNow.AddMinutes(-1);
var record = _dc.DMPs
.Where(x =>
x.MappedId == null
&& x.Ignored == false
&& (x.ConcurrencyLockDate.Equals(null) || x.ConcurrencyLockDate < maxLockTime))
.OrderBy(x => x.id).Skip(skip).Take(1).ToList()
.Select(x => new
{
x.id,
x.Ignored,
x.MappedId,
x.SourceData
}).FirstOrDefault();
生成以下SQL where子句: -
WHERE ([Extent1].[MappedId] IS NULL)
AND (0 = [Extent1].[Ignored])
AND ([Extent1].[ConcurrencyLockDate] < @p__linq__1)
正如您所看到的,对“ConcurrencyLockDate”的“null或equals”检查是不正确的,因为它不包括NULL为NULL的结果。我正在使用带有.NET 4.5 RC的EF5 RC。
有谁知道我怎么做到这一点?这看起来很简单,所以我把头发撕掉了。
答案 0 :(得分:1)
DateTime
类型的列不能为空:DateTime
是不可为空的类型。如果它可以为空,则类型应为DateTime?
。