2016-05-19 9 views
2

私はLINQを学習しており、LINQを管理するための複雑な状況を設定しようとしました。まあ...私は立ち往生している。LINQ multiple list join

class Class 
{ 
    public int Number { get; private set; } 

    public Class(int number) 
    { 
     Number = number; 
    } 
} 

先生のクラス:

class Teacher 
{ 
    public string Name { get; private set; } 

    public int Class { get; set; } 

    public Teacher(string name, int Class) 
    { 
     Name = name; 
     this.Class = Class; 
    } 
} 

Studentクラス:

class Student 
{ 
    public string Name { get; private set; } 
    public int Class { get; set; } 

    public Student(string name, int Class) 
    { 
     Name = name; 
     this.Class = Class; 
    } 
} 

私がしたい私は3つのクラス

クラスのクラスで設定は何

doはこれらの3つのCに加わっています教師とその学生を含む学校のクラスのリストを得るために一緒にlasses。

私は次のように試してみました:そこに多くのクラス、教師があり、学生はリストの準備ができてオブジェクト

var classWithTeacherAndStudent = 
      from Class in classes 
      join Teacher in teacher 
       on Class.Number equals Teacher.Class 
      let teacherClass = new {Class, Teacher} 
      join student in students 
       on teacherClass.Class.Number equals student.Class 
       into entireClass 
      select new 
      { 

      }; 

+0

正確に結果を望みますか?あなたのリストにあるものと望みの結果のいくつかの例を表示できますか? – juharr

+0

あなたは右に結合があるように思えます - あなたはどこにいらっしゃいますか?フィールドを出力する構文を探していますか?フラットなリストやネストされたグループが必要ですか? –

+0

@Dスタンリー私はネストされたグループに入れていました。 –

答えて

1

参加が正しいと思われます。すべての値を匿名型に選択するだけで、各エントリにクラス、教師、およびすべての生徒が含まれます。

var classWithTeacherAndStudent = 
from Class in classes 
join Teacher in teacher 
    on Class.Number equals Teacher.Class 
let teacherClass = new { Class, Teacher } 
join student in students 
    on teacherClass.Class.Number equals student.Class 
    into entireClass 
select new 
{ 
    teacherClass.Teacher, teacherClass.Class, entireClass 
}; 

foreach (var entry in classWithTeacherAndStudent) 
{ 
    Console.WriteLine("teacher: {0}, class: {1}", entry.Teacher.Name, entry.Class.Number); 
    foreach (var student in entry.entireClass) 
    { 
     Console.WriteLine(student.Name); 
    } 
} 
+0

ありがとうございました。私の "全体クラス"リストには学生しか入っていなかったことに気づきませんでした。分かりました –