我正在尝试使用可能的NULL值查询表。根据这个问题,使用方法object.Equals
是这样做的:
DateTime? myDate = null;
var q =
from row in db.Activities
where object.Equals(row.FirstActivityTime, myDate)
select row;
这可行,但是当我为分配一个非null值时myDate
,
DateTime? myDate = DateTime.Now;
一切都崩溃了,并抛出异常“无法将类型'System.Nullable'1'转换为类型'System.Object'。LINQto Entities仅支持转换EDM基本类型或枚举类型”。
我可以将where子句改写成
where row.FirstActivityTime == myDate || (row.FirstActivityTime == null && myDate == null)
但是有什么办法可以使它起作用object.Equals
吗?
由于您使用的是LINQ to Entities,而不是LINQ to SQL,因此您所引用的问题不适用。您只需要row.FirstActivityTime == myDate
在过滤器中使用,EF就会生成正确的SQL查询,其中包括is null
检查和相等检查。
编辑
事实证明,此行为已稍作更改,您需要在上下文中设置一个标志以恢复旧的行为。(来源:http : //entityframework.codeplex.com/workitem/178)
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
完成之后,is null
检查将包含在生成的SQL中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句