【问题标题】:LINQ query with Left Join, Group by without null List带有左连接的 LINQ 查询,不带空列表的分组方式
【发布时间】:2018-02-25 23:49:03
【问题描述】:

我正在使用 Left-Join 和 groupBy 进行 LINQ 查询,所以我有可能有也可能没有答案集合的问题列表。我想要按问题分组的所有问题及其答案列表,如果为空则不想添加。

我当前的解决方案工作正常,但它仍然添加一个带有 null 的列表,其中没有答案,因此在 Answer count() 上给了我错误的结果

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();

我在上面的代码中尝试了以下脚本,它抛出空异常

    Answer = grouped.ToList() == null ? "(No Answer)" : grouped.Select(x => x.Value).FirstOrDefault(),

【问题讨论】:

    标签: linq


    【解决方案1】:

    当您调用 ps.DefaultIfEmpty() 时,它会为不匹配的元素创建一个带有 null 的列表。如果您只想获取 null 而不是带有 null 元素的列表,请尝试以下代码:

    Answer = grouped.FirstOrDefault() == null ? null : grouped.ToList(),
    

    如果没有匹配,那么 Answer 为空,否则你得到一个列表。

    【讨论】:

      【解决方案2】:

      我认为问题是由类型引起的,所以试试这个:

      Answer = grouped.ToList() == null ? null : grouped.Select(x => x.Value).FirstOrDefault(),
      

      【讨论】:

      • new Answer() 在您提到的上述代码中无法识别
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多