2009-04-15 144 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獲得的課程的學生被登記在一個列表? (假設我有三個班的一個IList)

回答

10

如何:

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

在連接之前執行where *會更有效 - 在連接中將註冊負載與課程進行匹配沒有意義,只能立即將它們丟棄。 – 2009-04-15 14:52:04

1

沒有一個明確的答案,但或許隱含有幫助建立您的系統。

你有沒有考慮一個更豐富的域模型就像這樣:

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

那麼學生類可以有一個方法GetEnroledCourses()像這樣:

​​

一個模型,它是僅僅是一個一對一的映射到數據庫足夠在某些情況下,但如果你有複雜的業務像«anemic domain model»這樣的邏輯可能會咬你。