2011-06-05 106 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 2011-06-05 21:52:56

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