开发者

Group by and average in linq

I have 2 tables. MarkQuestion and Question.

MarkQuestion has:
IDQuestion,
IDUser,
Mark

Question has:
IDQuestion,
Text

I want to extract text of each question and average mark for each question:

I tried something like this:

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
                          开发者_如何学Python{
                              AverageMark = markGroup.Average(x => x.Mark),
                              Text = ..
                          };

How to solve this?


It sounds to me like you want a group join, so that you have two range variables - one representing a question, and another representing all the marked questions for that particular question.

Here's the query expression syntax you'd use:

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
                };

For dot notation, you'd use the GroupJoin method to achieve the same result.


Something like this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜