Consider this LINQ expression written using query notation:
 List pr = (from p in db.Persons
                     join e in db.PersonExceptions
            
         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.