LINQ:JOIN的点表示法等价形式

42

考虑使用查询符号编写的这个LINQ表达式:

 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();

问题:如何使用点表示法编写此LINQ表达式?

1个回答

79

像这样:

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();

注意新的匿名类型被引入,以便携带pe位的信息。在规范中,执行此操作的查询运算符使用透明标识符来指示行为。


11
当 Jon Skeet 不立即可用时,您可以使用 Resharper 获得相同的答案。 - ScottS
7
关于什么时候会发生这件事的详细信息,请参见http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - 哦,当然,《深入理解C#》也涵盖了所有这些内容。就像在你的书架上有一个缩小版的我 ;) - Jon Skeet
谢谢Jon。我这周刚读了你的书。非常感谢!在这种情况下,我可能会坚持使用查询符号。 - p.campbell
2
我想看到两个连接(即三个来源)的点符号表示法。我不是在谈论多个连接条件,而是在谈论多个连接。长时间的谷歌搜索没有找到任何示例。 - Brent Arias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接