【问题标题】:Group by and average in linqlinq中的分组和平均
【发布时间】:2011-06-05 18:54:07
【问题描述】:

我有 2 张桌子。 MarkQuestion 和问题。

MarkQuestion has:
IDQuestion,
IDUser,
Mark

Question has:
IDQuestion,
Text

我想提取每个问题的文本和每个问题的平均分:

我尝试过这样的事情:

var questions = from mark in Entities.MarkedQuestions
                          join question in Entities.Questions on mark.IDQuestion equals question.IDQuestion
                          group mark by mark.IDQuestion into markGroup,
                          question by question.IDQuestion into questionGroup
                          select new ModelView.MarkQuestionModel
                          {
                              AverageMark = markGroup.Average(x => x.Mark),
                              Text = ..
                          };

如何解决?

【问题讨论】:

    标签: c# .net linq ado.net linq-to-entities


    【解决方案1】:

    听起来你想要一个组加入,所以你有两个范围变量 - 一个代表一个问题,另一个代表该特定问题的所有标记问题。

    这是您要使用的查询表达式语法:

    var questions = from question in Entities.Questions
                    join marked in Entities.MarkedQuestions
                        on question.IDQuestion equals marked.IDQuestion
                        into marks
                    select new ModelView.MarkQuestionModel
                    {
                        AverageMark = marks.Average(x => x.Mark),
                        Text = question.Text
                    };
    

    对于点表示法,您可以使用GroupJoin 方法来获得相同的结果。

    【讨论】:

      【解决方案2】:

      类似这样的:

      var questions =
          from question in Entities.Questions 
          select
              new
              {
                  question.Text,
                  AverageMark = Entities.MarkedQuestions
                      .Where(arg => arg.IDQuestion == question.IDQuestion)
                      .Average(arg => arg.Mark)
              };
      

      【讨论】:

        猜你喜欢
        • 2016-09-18
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 2015-06-20
        相关资源
        最近更新 更多