LINQ:JOIN的点符号等价物

p.c*_*ell 37 c# linq syntax linq-query-syntax

考虑使用查询表示法编写的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();
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 71

像这样:

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();
Run Code Online (Sandbox Code Playgroud)

注意如何引入一个新的匿名类型来携带pe前进位.在规范中,执行此操作的查询运算符使用透明标识符来指示行为.

  • 当Jon Skeet无法立即使用时,您可以使用Resharper获得相同的答案. (8认同)
  • 有关何时的详细信息,请参阅http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - 哦,深度中的C#进入所有这一切当然也是.这就像在你的书架上有我的微型版本;) (6认同)
  • 我想查看两个连接(即三个源)的点符号。我不是在谈论多个连接条件,而是在谈论多个连接。经过长时间的谷歌搜索,没有找到任何例子。 (2认同)