![](/img/trans.png)
[英]Entity Framework Code First Exception: Value cannot be null. Parameter name: source
[英]“Value cannot be null. Parameter name: source” when running a nested query on entity framework
我有以下代码,在加载Peers
时出现错误:
值不能为空。 参数名称:来源
我正在使用FirstOrDefault
和DefaultIfEmpty
方法,并且在select
语句中,我还在检查对象是否为空m => m == null ?
。 但是,我无法避免该错误。 有任何想法吗?
ReviewRoundDTO_student results = _context.ReviewRounds
.Include(rr => rr.ReviewTasks).ThenInclude(rt => rt.ReviewTaskStatuses)
.Include(rr => rr.Submissions).ThenInclude(s => s.PeerGroup.PeerGroupMemberships).ThenInclude(m => m.User)
.Include(rr => rr.Rubric)
.Where(rr => rr.Id == reviewRoundId)
.Select(rr => new ReviewRoundDTO_student
{
Id = rr.Id,
SubmissionId = rr.Submissions.FirstOrDefault(s => s.StudentId == currentUser.Id).Id,
Peers = rr.Submissions.FirstOrDefault(s => s.StudentId == currentUser.Id)
.PeerGroup.PeerGroupMemberships.DefaultIfEmpty()
.Select(m => m == null ? new ApplicationUserDto { } : new ApplicationUserDto
{
//FullName = m.User.FullName,
//Id = new Guid(m.UserId)
}),
}).FirstOrDefault();
尝试避免使用FirstOrDefault().Something
构造表达式树不支持?.
您通常在与对象查询类似的LINQ中使用的运算符,并且EF Core当前在正确转换它方面存在问题-如果查看异常堆栈跟踪,则很有可能该异常来自EF Core基础结构,而没有涉及用户代码。
我建议不使用此类构造重写LINQ查询,例如这样的事情:
var results = _context.ReviewRounds
.Where(rr => rr.Id == reviewRoundId)
.Select(rr => new ReviewRoundDTO_student
{
Id = rr.Id,
SubmissionId = rr.Submissions
.Where(s => s.StudentId == currentUser.Id)
.Select(s => s.Id)
.FirstOrDefault(),
Peers = rr.Submissions
.Where(s => s.StudentId == currentUser.Id)
.Take(1)
.SelectMany(s => s.PeerGroup.PeerGroupMemberships)
.Select(m => new ApplicationUserDto
{
FullName = m.User.FullName,
Id = m.UserId
})
.ToList(),
})
.FirstOrDefault();
请注意,投影查询中不需要Include
/ ThenInclude
,因为它们被忽略了 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.