Группировать по и среднему в linq - PullRequest
1 голос
/ 05 июня 2011

У меня есть 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 = ..
                          };

Как это решить?

Ответы [ 2 ]

9 голосов
/ 05 июня 2011

Мне кажется, что вы хотите групповое объединение , так что у вас есть две переменные диапазона - одна представляет вопрос, а другая представляет все отмеченные вопросы для этого конкретного вопроса.

Вот синтаксис выражения запроса, который вы бы использовали:

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 для достижения того же результата.

1 голос
/ 05 июня 2011

Примерно так:

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