2013-04-30 49 views
0

我寫在LINQ寫這個SQL查詢,但沒有工作..如何在SQL查詢轉換爲LINQ與ORDERBY,GROUPBY

select [ProcessTime], Count([ID]) as 'amount of processes' 
from [DB].[dbo].[TableX] 
where [ID] in ('ServerX', 'ServerY') and [Type] ='Complete' 
group by [ProcessTime] 
order by [ProcessTime] 

我想實現這個LINQ &什麼我都試過了,我將查詢分爲兩個,一個用於處理時間group by子句和另一計數ID的

var query1 = (from a in this.db.Processes 
       where (a.ID =='ServerX' || a.ID =='ServerY') && a.Type =='Complete' 
       group a by a.ProcessTime into b 
       //here I dont know where to place orderby 
       select b); 


var query2 = (from a in this.db.Processes 
       where (a.ID =='ServerX' || a.ID =='ServerY') && a.Type =='Complete' 
       orderby a.ProcessTime 
       select a).Count(); 

這是對查詢分成兩個正確的方式再後來將它們結合起來?

+0

請仔細閱讀http://meta.stackexchange.com/questions/10647/how-do-i -write-a-good-title – 2013-04-30 06:36:48

回答

1

試試這個:

var serverNames = new string[]{"ServerX", "ServerY"}; 
var result = db.Processes 
    .Where(p => serverNames.Contains(p.ID) && p.Type == "Complete") 
    .GroupBy(p => p.ProcessTime) 
    .Select(g => new 
    { 
     ProcessTime = g.Key, 
     AmountOfProcesses = g.Count() 
    }) 
    .OrderBy(x => x.ProcessTime); 
+0

可以在最後添加ToList()嗎?因爲我想將它添加到我的列表框中ItemsSource – user1221765 2013-04-30 06:54:56

+0

用'OrderBy'(大寫B)替換'Orderby'。 – RePierre 2013-04-30 06:56:38

+0

是的抱歉,這是我的錯誤,我改了它 – user1221765 2013-04-30 06:57:11

1

你可以做到這一切在一個查詢:

var query1 = (from a in this.db.Processes 
       where (a.ID == "ServerX" || a.ID == "ServerY") && a.Type == "Complete" 
       group a by a.ProcessTime into b 
       orderby b.Key 
       select new {ProcessTime = b.Key, Count = b.Count()}); 
+0

這也適用!感謝@Andrei提供簡單的解決方案 – user1221765 2013-04-30 07:01:39