当不满足linq查询条件时,我希望从questions.FirstOrDefault()
返回空值-而是一个异常
序列中没有匹配的元素
被抛出。有什么想法吗?
var firstQ = questions.FirstOrDefault(a =>
a.Answers.Single(x => x.CourseAssignmentId ==
courseAssignmentId)?.Score == null) ?? questions.FirstOrDefault();
答案 0 :(得分:0)
这就是Single
和SingleOrDefault
之间的区别。
Single
就会引发异常。
答案 1 :(得分:0)
您应该改用FirstOrDefault()
。顺便说一句,您可以结合条件大概
a.Answers.Single(x => x.CourseAssignmentId == courseAssignmentId && x.Score == null)
答案 2 :(得分:0)
正如其他人已经提到的,这是Enumerable.Single
的预期行为。
无论如何,它看起来像一个XY problem。也许您应该将最后得分的问题存储在某个地方(例如字典)。
也就是说,您可以按以下方式重构代码:
var assignmentScoredQuestionMap = new Dictionary<int, Question>();
// Fill the whole dictionary:
// You need to add for which assignment identifier you've answered a question
int assignmentId = 384;
// If the whole assignment exists, you set lastScoredQuestion, otherwise
// you set it to first question.
if(!assignmentScoredQuestionMap.TryGetValue(assignmentId, out var lastScoredQuestion))
lastScoredQuestion = questions.FirstOrDefault();