如何解决具有可选导航属性的嵌套 DTO:“类型 'Expression[]' 和匿名类型之间未定义强制运算符”
我正在尝试使用导航属性构建带有实体框架 (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 举报,一经查实,本站将立刻删除。