private7
private7

Reputation: 375

Inner join in C# with lambda

I'm new to LINQ and Lambda. I want to make query that will get me for every studyYear (1,2,3) students who are studying that year. I've done it without Lambda but I really want to know how to do it with lambda.

            var res = from s in db.student
                  join u in db.EnrolledYear
                  on s.ID equals u.studentID
                  join g in db.studyYear
                  on u.studyYearID equals g.ID
                  select new
                  {
                      Year = g.year,
                      StudentFName = s.FirstName
                      StudentLName = s.LastName
                  };

I checked out other examples with lambda but I didn't really understand . What I managed is to make inner join between student and enrolled year. Now I don't understand how to finish inner join between enrolled year and study year. I'm stuck here, I need to make one more join:

var res = db.EnrolledYear.Join(db.student,
                  u => u.studentID, s => s.ID,
                  (enroll, student) => new
                  {
                      Godina = enroll.year,
                      FName = student.FirstName
                      LName = student.LastName
                  })
                  .Join(.....?)

Picture in imgur of relations in database:

Upvotes: 0

Views: 914

Answers (2)

Ljubomir Bacovic
Ljubomir Bacovic

Reputation: 584

Use Include.

Something like:

db.students.Include(x => x.EnrolledYears).ThenInclude(x=>x.StudyYear).Select(new ...)

Upvotes: 3

Jeff Mercado
Jeff Mercado

Reputation: 134621

Every clause in a query will correspond to a lambda call. Just go down to every clause and convert to an appropriate call.

This particular query could be written like so:

db.student
    .Join(db.EnrolledYear, s => s.ID, u => u.studentID, (s, u) => new { s, u })
    .Join(db.studyYear, x => x.u.studyYearID, g => g.ID, (x, g) => new { x.s, x.u, g })
    .Select(x => new
    {
        Year = x.g.year,
        StudentFName = x.s.FirstName,
        StudentLName = x.s.LastName,
    });

Upvotes: 0

Related Questions