Reputation: 23039
I've looked at the 101 Linq Samples here but I can't see anything like this in that list. If I'm just not seeing a relevant example there, please link to it.
If I have these 3 classes:
class Student { int id; string name }
class Course { int id, string name }
class Enrolment { int studentId; int courseId; }
How would I use LINQ to get a list of courses a student is enrolled on? (assume I have an IList of all three classes)
Upvotes: 2
Views: 3762
Reputation: 4037
Not an explicit answer, but perhaps implicitly helpful building your system.
Have you considered a richer domain model like so:
class Student { int id; string name; IEnumerable<Enrolment> enrolments }
class Course { int id, string name; }
class Enrolment { Student student; Course course; }
?
The Student class could then have a method GetEnroledCourses() like so:
public IEnumerable<Course> GetEnroledCourses()
{
return enrolements.Select(enrolement => enrolement.Course).ToList().AsReadonly();
}
A model that's merely a one-to-one mapping to the database suffice in some contexts, but if you have complex business logic such an «anemic domain model» might bite you.
Upvotes: 1
Reputation: 185703
var courses = (from course in courseList
join enr in enrolmentList on enr.courseId equals course.id
where enr.studentId = <student id variable>
select course);
Upvotes: 0
Reputation: 1503839
How about:
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;
}
Upvotes: 10