无法查询定义为 IsOptional 的枚举是否存在空值
Enum defined as IsOptional cannot be queried for null values
我通过 Fluent API 在实体上定义了一个枚举 属性 作为 IsOptional。数据库反映 IsOptional,因为它将它显示为可为 null 的类型。当我尝试查询此实体 属性 的空值时,出现以下错误:
The 'UserType' property on 'Group' could not be set to a 'null' value.
You must set this property to a non-null value of type 'UserType'.
查询如下:
var groups = (from g in db.Groups
let reqs = from r in db.Requests
where r.Id == requestId from gg in r.Groups select gg.Id
where g.ContentArea.Id == db.Requests.FirstOrDefault(o => o.Id == requestId).ContentArea.Id
where !reqs.Contains(g.Id)
where (g.UserType == db.Requests.FirstOrDefault(r => r.Id == requestId).User.UserType || g.UserType == (UserType?)null)
select g).ToList();
具体中断的部分在 OR 语句之后
g.UserType == (UserType?)null
我已经尝试将 g.UserType 与 null 进行比较,设置 UserType 的实例? nullType = null 并进行了比较,但似乎没有任何效果。这似乎是EF的缺点。有什么建议吗?
编辑:按要求包含了整个查询。
问题不在于语句的结构,而在于 EF 试图具体化的实体。 Group
有一个不可为空的 属性 UserType
。但在数据库中它是可以为空的,并且一些 returned 记录具有空值。
所以您要么必须使 属性 可为空:
UserType? UserType { get; set; }
或确保语句不 return 空值。
我通过 Fluent API 在实体上定义了一个枚举 属性 作为 IsOptional。数据库反映 IsOptional,因为它将它显示为可为 null 的类型。当我尝试查询此实体 属性 的空值时,出现以下错误:
The 'UserType' property on 'Group' could not be set to a 'null' value.
You must set this property to a non-null value of type 'UserType'.
查询如下:
var groups = (from g in db.Groups
let reqs = from r in db.Requests
where r.Id == requestId from gg in r.Groups select gg.Id
where g.ContentArea.Id == db.Requests.FirstOrDefault(o => o.Id == requestId).ContentArea.Id
where !reqs.Contains(g.Id)
where (g.UserType == db.Requests.FirstOrDefault(r => r.Id == requestId).User.UserType || g.UserType == (UserType?)null)
select g).ToList();
具体中断的部分在 OR 语句之后
g.UserType == (UserType?)null
我已经尝试将 g.UserType 与 null 进行比较,设置 UserType 的实例? nullType = null 并进行了比较,但似乎没有任何效果。这似乎是EF的缺点。有什么建议吗?
编辑:按要求包含了整个查询。
问题不在于语句的结构,而在于 EF 试图具体化的实体。 Group
有一个不可为空的 属性 UserType
。但在数据库中它是可以为空的,并且一些 returned 记录具有空值。
所以您要么必须使 属性 可为空:
UserType? UserType { get; set; }
或确保语句不 return 空值。