2009-04-15 18 views
2

私は101 Linqのサンプルhereを見てきましたが、そのようなリストには何も表示されません。関連するサンプルが表示されない場合は、そのサンプルにリンクしてください。LINQ - 複数のリストを結合する

私はこれらの3つのクラスを持っている場合:

class Student { int id; string name } 
class Course { int id, string name } 
class Enrolment { int studentId; int courseId; } 

どのように私は、LINQは、学生が上の登録されたコースのリストを取得するために使用するのでしょうか?お使いのシステムを構築

IEnumerable<Course> FindCoursesForStudent(Student student) 
{ 
    return from enrolment in Enrolments 
      where enrolment.studentId == student.id 
      join course in Courses 
       on enrolment.courseId equals course.id 
      select course; 
} 

答えて

10

方法について(私はすべての3つのクラスのIListのを持っていると仮定)。

class Student { int id; string name; IEnumerable<Enrolment> enrolments } 
class Course { int id, string name; } 
class Enrolment { Student student; Course course; } 

は、あなたがそうのような豊かなドメインモデルを検討したことがありますか?

Studentクラスは、そのようにのような方法GetEnroledCourses()かもしれない。単にデータベースへの1対1のマッピングは、いくつかの状況で十分だ

​​

モデルをしていますが、複雑なビジネスを持っている場合«anemic domain model»のようなロジックがあなたを噛んでしまうかもしれません。

0
var courses = (from course in courseList 
    join enr in enrolmentList on enr.courseId equals course.id 
    where enr.studentId = <student id variable> 
    select course); 
+1

join * before *を実行する方が効率的です - 参加者のコースに参加している登録の負荷を一致させることに意味がなく、ただちにもう一度それらを投棄することは意味がありません。 –

+0

LINQのようなサウンドはより良いオプティマイザを必要とします;) –

1

ない明示的な答えは、おそらく暗黙的に役立つ:

関連する問題