我查看了101 Linq样本here,但我在该列表中看不到这样的内容。如果我在那里没有看到相关的例子,请链接到它。
如果我有这3个班级:
class Student { int id; string name }
class Course { int id, string name }
class Enrolment { int studentId; int courseId; }
我如何使用LINQ获取学生注册的课程列表? (假设我有一个所有三个类的IList)
答案 0 :(得分: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;
}
答案 1 :(得分:1)
不是一个明确的答案,但可能隐含有助于构建您的系统。
您是否考虑过更为丰富的域名模型:
class Student { int id; string name; IEnumerable<Enrolment> enrolments }
class Course { int id, string name; }
class Enrolment { Student student; Course course; }
然后,Student类可以有一个方法GetEnroledCourses(),如下所示:
public IEnumerable<Course> GetEnroledCourses()
{
return enrolements.Select(enrolement => enrolement.Course).ToList().AsReadonly();
}
在某些情况下,只是一对一映射到数据库的模型就足够了,但如果你有复杂的业务逻辑,那么«anemic domain model»可能会咬你。
答案 2 :(得分: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);