2009-10-02 74 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