2014-02-19 68 views
1

期間是一個包含屬性'periodStart'和'periodEnd'的集合。 我需要按每個期間的最後'periodEnd'的值來訂購網格。如何使用Linq訂購集合物?

我認爲下面的代碼會工作,...

var result = from sched in schedles 
    orderby sched.Periods.Last().periodEnd descending 
    select new Grid 
    { 
    ID = sched.ID, 
    Name = sched.Name 
    }; 

,而是我得到的錯誤 - >

消息:LINQ到實體無法識別方法「 ...最後[Period](System.Collections.Generic.IEnumerable`1 [... Period])' 方法,並且此方法無法轉換爲存儲表達式。

我相信這對於更高級的開發人員來說是一個簡單的問題,但我知道我錯過了一些理解。 在此先感謝任何能幫助我理解此orderby聲明的侷限性的人。

回答

4

有共同的LINQ方法是not supported by LINQ to Entities的主機。 Last()就是其中之一。如果您使用的是First(),您將獲得

「First」方法只能用作最終查詢操作。

所以,你應該做的

orderby sched.Periods.OrderByDescending(p => p.periodEnd) 
      .FirstOrDefault().periodEnd 

必須通過一些屬性責令Period s到告訴EF什麼 「第一」 是。您可以使用FirstOrDefault()而不防範空引用異常,因爲整個表達式被轉換爲SQL。它不會像內存中的LINQ一樣執行。

0

如果我正確理解你的問題,我相信這會得到你想要的結果:

var result = schedles.OrderByDescending(x => x.periodEnd).Select(new Grid 
                   { 
                     ID = sched.ID, 
                     Name = sched.Name 
                   });