我正在使用Left-Join和groupBy进行LINQ查询,所以我有可能有也可能没有回答集合的问题列表。我想逐个问题组和他们的答案列表,如果它是null,那么不想添加。
我当前的解决方案工作正常,但它仍然添加一个null列表,其中没有答案,因此给我错误的结果答案计数()
var dhd = (from question in Context.Questions
join answer in Context.Answers on question.Id equals answer.QuestionId into ps
from answerDetail in ps.DefaultIfEmpty()
group answerDetail by question into grouped
select new
{
Question = grouped.Key,
Answer = grouped.ToList(),
//Answer = grouped.ToList() == null ? "(No Answer)" : grouped.Select(x => x.Value).FirstOrDefault(),
TotalAnswerCount = grouped.Count()
}).ToList();
我在上面的代码中尝试了以下脚本,并抛出了null异常
Answer = grouped.ToList() == null ? "(No Answer)" : grouped.Select(x => x.Value).FirstOrDefault(),
答案 0 :(得分:2)
当您致电ps.DefaultIfEmpty()
时,它会为非匹配元素创建一个null列表。如果你想得到null而不是带有null元素的列表,那么试试这段代码:
Answer = grouped.FirstOrDefault() == null ? null : grouped.ToList(),
如果没有匹配,则答案为空,否则您将获得一个列表。
答案 1 :(得分:1)
我认为问题是因为类型而发生的,所以试试这个:
Answer = grouped.ToList() == null ? null : grouped.Select(x => x.Value).FirstOrDefault(),