不能查询定义为 IsOptional 的枚举以获取空值

本文关键字:枚举 获取 空值 IsOptional 查询 定义 不能 | 更新日期: 2023-09-27 17:56:57

我通过Fluent API在实体上定义了Enum属性作为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的一个缺点。有什么建议吗?

编辑:根据要求包括整个查询。

不能查询定义为 IsOptional 的枚举以获取空值

问题不在于语句的结构,而在于 EF 尝试实现的实体。 Group具有不可为空的属性UserType。但在数据库中它是可为空的,并且某些返回的记录具有空值。

因此,您必须使该属性可为空:

UserType? UserType { get; set; }

或者确保语句不返回 null 值。