2017-09-08 17 views
0

エンティティとリストに参加し、エンティティからの一致するレコードの平均を取得する必要があります。ここでは、各学生が第二のテーブルに複数のスコア値を持つことになりますエンティティとリストを結合し、2番目のテーブルの平均値を取得

リストとエンティティがあると私はそれぞれの学生の平均スコアが必要です。

+0

あなたの言語は?あなたのDBは何ですか?これまでに何を試みましたか?私たちと共有するコードはありますか? –

答えて

1

GroupJoin拡張メソッドを使用できます。それはStudentIdのコレクションに参加し、その結果をStudentIdでグループ化します。

GroupJoinは拡張メソッドです。これは、オブジェクトの1つのコレクションをキーでグループ化し、それらのグループをキー付きオブジェクトの別のコレクションと結合します。このメソッドでは、各キーで結果のグループが配置されるコレクションを作成します。

 var students = new List<Student> 
     { 

      new Student { StudentID = 100, Name= "aaa", Address="Add1" }, 
      new Student { StudentID = 101, Name= "bbb", Address="Add2" }, 
      new Student { StudentID = 102, Name= "ccc", Address="Add3" }, 
      new Student { StudentID = 103, Name= "ddd", Address="Add4" }, 
     }; 
     var scores = new List<Score> 
     { 
      new Score { StudentID = 100, Marks = 70 }, 
      new Score { StudentID = 100, Marks = 60 }, 
      new Score { StudentID = 100, Marks = 80 }, 
      new Score { StudentID = 101, Marks = 50 }, 
      new Score { StudentID = 101, Marks = 40 }, 
      new Score { StudentID = 101, Marks = 70 }, 
      new Score { StudentID = 102, Marks = 74 }, 
      new Score { StudentID = 102, Marks = 77 }, 
      new Score { StudentID = 102, Marks = 75 }, 
      new Score { StudentID = 103, Marks = 76 }, 
      new Score { StudentID = 103, Marks = 80 }, 
      new Score { StudentID = 103, Marks = 70 }, 
      new Score { StudentID = 103, Marks = 60 }, 
     }; 

     var result = students.GroupJoin(scores, 
          student => student.StudentID, 
          score => score.StudentID,  
          (std, groupedScore) => new 
          { 
           StudentID = std.StudentID, 
           Name = std.Name, 
           Address = std.Address, 
           AvgScore = groupedScore.Average(x => x.Marks), 
          }).ToList(); 
関連する問題