2013-05-28 2 views
1

У меня есть простой Linq запрос, который группирует по одному полю Team:Linq в группе по 2 колонки в C#

var qbt = db.Calls.GroupBy(x => x.team).Select(call => new 
     { 
      Team = call.Key, 
      Number=call.Count() 
     }); 

который возвращает:

Team Number 
ta 100 
tb 98 
tc 123 

Как изменить запрос, чтобы иметь дополнительный столбец «статус», так что она возвращает:

Team Number Status 
ta 40  Open 
ta 60  Closed 
tb 58  Open 
tb 40  Closed 
tc 1  Open 
tc 122 Closed 

Я попытался добавить еще одну группу:

var qbt = db.Calls.GroupBy(x => x.team).GroupBy(y => y.status).Select(call => new 
     { 
      Team = call.Key, 
      Status = call.Key2, 
      Number=call.Count() 
     }); 

... но это не скомпилируется.

Спасибо, Марк

ответ

4

Вам нужно создать новый анонимный тип внутри groupping, что должен сделать трюк.

var qbt = db.Calls 
    .GroupBy(x => new { Team = x.team, Status = x.status }) 
    .Select(call => new 
    { 
     Team = call.Key.Team, 
     Status = call.Key.Status, 
     Number=call.Count() 
    }); 
+2

Ваш синтаксис неверен. Это должно быть 'Team = call.Key.Team' и' Status = call.Key.Status' ('Key2' не существует, а' Key' будет анонимным типом, созданным в groupby) – Jamiec

+1

Право - даже не заметила эту часть, поскольку она была скопирована с вопросом; хотя самая важная часть, кажется, все в порядке. Благодарю. – Pako

+0

Большое спасибо – Mark

8

Вы можете группировать на анонимного типа:

.GroupBy(x => new { x.team, x.status }) 

С соответствующим выберите:

.Select(call => new 
    { 
     Team = call.Key.team, 
     Status = call.Key.status, 
     Number = call.Count() 
    }); 
Смежные вопросы