LINQ:where子句中的可空值类型

约翰·雷诺兹

我正在尝试使用可能的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

linq where 子句中的空值

来自分类Dev

在 Linq 中检查具有布尔数据类型的 where 子句中的两个条件时,List 为空

来自分类Dev

排除WHERE子句中的空白和空值

来自分类Dev

如何在where子句中添加空值(比较)

来自分类Dev

如果字段值为空,则排除where子句中的列

来自分类Dev

在 JOIN 子句中使用 WHERE 时也显示空值

来自分类Dev

where子句中的类型推断

来自分类Dev

IN子句中的空值-Teradata

来自分类Dev

where子句中的NULL值

来自分类Dev

WHERE 子句中的 SET 值

来自分类Dev

在where子句中构建动态linq查询

来自分类Dev

linq where子句中的逗号分隔列

来自分类Dev

LINQ where子句中的可变条件

来自分类Dev

LINQ的WHERE子句中的IF ELSE语句

来自分类Dev

linq where子句中的逗号分隔列

来自分类Dev

在where子句中构建动态linq查询

来自分类Dev

在LINQ Where子句中使用GetProperties()

来自分类Dev

在Linq where子句中检查Null

来自分类Dev

在where子句中检查相等的关联类型

来自分类Dev

返回结果集的 where 子句中的 case 语句包含空值

来自分类Dev

在WHERE子句中查询XML属性值

来自分类Dev

WHERE BETWEEN子句中的PostgreSQL jsonb值

来自分类Dev

重用WHERE子句中的字段值

来自分类Dev

在WHERE子句中使用Count值

来自分类Dev

返回引用WHERE子句中的选定值

来自分类Dev

在SQL where子句中删除+-值记录

来自分类Dev

WHERE子句中恒定值的最佳实践?

来自分类Dev

方法内的where子句中出现错误“ LINQ to Entities不支持LINQ表达式节点类型'Invoke'

来自分类Dev

方法内的where子句中出现错误“ LINQ to Entities不支持LINQ表达式节点类型'Invoke'”