2016-04-22 7 views
-6

私はLinqを初めて利用しています。私には2つのリストがあり、1つは学生リストであり、もう1つはマークリストです。学生には、ID、名前、マークリストID(sid)、マーク、サブジェクトがあります。生徒の身分証明書、氏名、合計得点を取得する必要があります。私は以下のようにコードに近づいています。Linqは2つのリストの間で結合する

class Student 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
} 

class Marks 
{ 
    public int Sid {get;set;} 
    public int mark {get;set;} 
    public string subjects {get;set;} 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     //student 
     List<Student> studentList = new List<Student>() 
     { 
      new Student() { Id = 1, name = "A" }, 
      new Student() { Id = 2, name = "B" } 
     }; 

     //marks 
     List<Marks> markList = new List<Marks>() 
     { 
      new Marks() { Sid = 1, mark = 30, subjects = "A1" }, 
      new Marks() { Sid = 1, mark = 40, subjects = "A2" }, 
      new Marks() { Sid = 2, mark = 40, subjects = "B1" }, 
      new Marks() { Sid = 1, mark = 50, subjects = "B2" } 
     }; 

     var result=(from stu in studentList 
        join mar in markList 
         on stu.Id equals mar.Sid        
        select new 
         { 
          stu.Id, 
          stu.name, 
          mar.mark, 
          mar.subjects 
         }) 
        .GroupBy(x => x.subjects).ToList(); 

上記のLinqクエリは私の要件を満たしていません。助言がありますか?

+1

より読み取り可能コードをインデントするためにあなたの質問を編集してくださいためのマークの一覧コレクション初期化子を使用すると、より多くのコードを読みやすくコンパクトに書くことができます。さて、実際の出力は何ですか?そして、あなたの望む出力は何ですか? 「自分の要件を満たしていない」以上の情報を提供してください。 Stack Overflowの目的は、質の高い質問と回答のリポジトリを作成することであることを忘れないでください。 –

+0

結合を使用してください。ウェブページをご覧ください:https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – jdweng

答えて

0
var result = studentList 
      .Join(markList, m => m.Id, s => s.Sid, (s, m) => new { s, m }) 
      .GroupBy(t => t.s) 
      .Select(g => new 
      { 
       Student = g.Key, 
       MarksCount = g.Count(), 
       Marks = g.Select(x => x.m).ToList() 
      }) 
      .ToList(); 

MarksCount - この学生のための総マーク
マークス - あなたは学生のそれぞれにコンストラクタを追加した場合ことに注意してください - この学生

関連する問題