Search code examples
c#linqsyntaxlinq-query-syntax

LINQ: dot notation equivalent for JOIN


Consider this LINQ expression written using query notation:

 List<Person> pr = (from p in db.Persons
                     join e in db.PersonExceptions
                     on p.ID equals e.PersonID
                     where e.CreatedOn >= fromDate
                     orderby e.CreatedOn descending
                     select p)
                   .ToList();

Question: how would you write this LINQ expression using dot notation?


Solution

  • Like this:

    List<Person> pr = db.Persons
                        .Join(db.PersonExceptions,
                              p => p.ID,
                              e => e.PersonID,
                              (p, e) => new { p, e })
                        .Where(z => z.e.CreatedOn >= fromDate)
                        .OrderByDescending(z => z.e.CreatedOn)
                        .Select(z => z.p)
                        .ToList();
    

    Note how a new anonymous type is introduced to carry both the p and e bits forward. In the specification, query operators which do this use transparent identifiers to indicate the behaviour.