2013-04-30 2 views
0

Я пишу, чтобы написать этот SQL запрос в LINQ, но не работал ..Как конвертировать 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 & то, что я пытался, Я разделил запрос на два, один для процесса временной группы по статье и еще посчитать идентификаторы

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 –

ответ

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

+0

Заменить «Orderby» на «OrderBy» (капитал B). – RePierre

+0

да извините, это была моя ошибка, я изменил его – user1221765

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