2010-04-16 54 views
3

我的問題是如何排序的子表LINQ查詢:Linq的順序按一個子表

表的應用程序:

- app_id 
- name 

表其appStatus:

- app_status_id 
- app_id 
- severity 
- status_date 

我想對所有應用程序進行查詢,按最後狀態嚴重性排序:

app_id name 
1 first 
2 second 
3 third 

app_status_id app_id severity status_date 
1 1 5 12-4-2010 
2 1 2 15-4-2010 
3 2 7 10-4-2010 
4 3 3 13-4-2010 

Now i want it sorted like: 
app_id name 
3 third 
1 first 
2 second 

任何人都可以用這個LINQ查詢來幫助我。

我已經試過以下,但沒有奏效:

var apps = from apps in dc.Apps 
         orderby apps.AppStatus.LastOrDefault().severity 
         select apps; 

編輯:

我會改進我的問題時,應先取得所有最新狀態的應用程序(使按狀態的日期),那麼它應該按照最後一個狀態的嚴重程度排序。

+0

在你的榜樣,也不會這些應用程序按最後的狀態服務器排序呃看起來像第一,第三,第二? – Jens 2010-04-16 09:32:03

回答

2

試試這個:

var apps = from apps in dc.Apps 
      orderby apps.AppStatus.Max(a => a.severity) 
      select apps; 

編輯根據您的評論:

var apps = from apps in dc.Apps 
      where apps.AppStatus.Count() > 0 // to prevent null reference below 
      orderby apps.AppStatus.Where(a1 => a1.status_date == 
       apps.AppStatus.Max(a2 => a2.status_date) 
      ).Single().severity 
      select apps; 
+0

謝謝,但它並沒有解決所有問題,它需要每個App的最後一個AppStatus,然後按每個最後狀態的嚴重性對它進行排序。 – Michael 2010-04-16 09:33:34

+0

在尺寸上嘗試新版本。 – 2010-04-16 09:40:19

+0

我認爲這確實解決了問題,我刪除了其中app.AppStatusCount()> 0的部分,因爲即使它沒有任何狀態,我也想顯示該應用程序。 謝謝! – Michael 2010-04-16 10:10:59

1

試着加入再排序:

var apps = from a in dc.Apps 
      join s in dc.AppStatus on a.app_id == s.app_id 
      orderby s.severity 
      select a; 
0
from app in myDC.Apps 
let severity = 
(
    from status in app.AppStatus 
    orderby status.StatusDate descending 
    select status.Severity 
).First() 
order by severity 
select app