【发布时间】:2021-06-24 05:11:59
【问题描述】:
我正在使用 Entity Framework Core 来查询视图。我可以将 where 子句添加到视图中的列,但是当向一个特定列添加子句时,它似乎正在添加空检查。
实体框架核心版本:3.1.4
例子:
var query = _appContext.MyView.AsQueryable();
query = query.Where(d => d.field1 != d.field2);
这会产生这样的结果:
Expression = {value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[DAL.Models.MyView]).
WHERE ((([e].[field1] <> [e].[field2]) OR ([e].[field1] IS NULL OR [e].[field2] IS NULL)) AND ([e].[field1] IS NOT NULL OR [e].[field2] IS NOT NULL))
但它应该只是:
WHERE ([e].[field1] <> [e].[field2])
【问题讨论】:
-
我假设这两个字段都可以为空?如果是这样,
query = query.Where(d => d.field1.Value != d.field2.Value); -
是的,这两个字段都可以为空。我尝试将 .value 添加到具有相同结果的两个字段。我以前使用的是 dbml 文件,并且相同的代码有效。我不确定为什么现在要添加空检查。
-
@Dennis 您使用的是哪个数据库,
field1和field2的确切类型是什么?