![](/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.