问题描述
我正在尝试使用导航属性构建带有实体框架 (6.2.0) 的嵌套 DTO。导航属性是可选的,因此我需要以 DTO 的相应属性也为空的方式处理空值:
var result = db.Projects.Select(
p => new
{
p.Id,Notifications = p.Notifications
.Where(n => n.ContactId == user.Id)
.Select(a => new
{
a.Id,a.ContactId,Candidate = a.Candidate == null ? null : new
{
a.Candidate.Id,a.Candidate.LastName
}
})
.OrderByDescending(n => n.Timestamp)
})
.FirstOrDefault(p => p.Id == projectId);
如代码所示,在我的模型中,有 Project
个实体,其中 0-n Notifications
,其中 Notification
可以可选有一个 {{ 1}}。
上面的代码抛出:
system.invalidOperationException: '没有定义强制操作符 在类型 'System.Linq.Expressions.Expression[]' 和 'f__AnonymousType43`2[system.int32,System.String]'。'
在运行时。如果我像这样删除空检查
Candidate
当 Candidate = new
{
a.Candidate.Id,a.Candidate.LastName
}
属性为 null 时,它预期会引发异常。 Null 传播也不起作用,并且 - 即使它起作用 - 也不符合 DTO 属性 Candidate
应该为 null 而不是具有 null 属性值的对象的要求:
Candidate
这不会编译:
表达式树 lambda 不能包含空传播运算符。
参考,导航属性的定义:
Candidate = new
{
Id = a.Candidate?.Id,LastName = a.Candidate?.LastName
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)