2011-06-05 3 views
1

У меня есть 2 стола. MarkQuestion и вопрос.Группа по и в среднем по linq

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

Как решить эту проблему?

ответ

9

Это звучит для меня, как вы хотите группы присоединиться к, так что у вас есть две переменных диапазон - один, представляющий вопрос, а другие, представляющую все отмеченные вопросы, которые конкретный вопрос.

Вот выражение запроса синтаксис вы будете использовать:

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

+0

Это работает. Благодарю. :) – Vajda

1

Что-то вроде этого:

var questions = 
    from question in Entities.Questions 
    select 
     new 
     { 
      question.Text, 
      AverageMark = Entities.MarkedQuestions 
       .Where(arg => arg.IDQuestion == question.IDQuestion) 
       .Average(arg => arg.Mark) 
     }; 
Смежные вопросы