2009-10-02 77 views
29

考虑使用查询符号写这个LINQ表达式:LINQ:点符号等效JOIN

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表达?

回答

60

像这样:

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位。在规范中,查询运算符使用透明标识符来指示行为。

+7

而当Jon Skeet没有立即可用时,您可以使用Resharper获得相同的答案。 – ScottS 2009-10-02 21:28:22

+6

有关具体时间的详细信息,请参阅http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 - 哦,并且Depth中的C#进入所有这当然也是如此。这就像在你的书架上有一个我的微缩版本;) – 2009-10-02 21:29:24

+0

感谢乔恩。本周读你的书。非常感谢!在这种情况下,我可能会坚持查询符号。 – 2009-10-02 21:30:47