具有左连接的LINQ查询,没有空列表的分组

时间:2018-02-25 09:19:57

标签: linq

我正在使用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(),

2 个答案:

答案 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(),