2015-08-26 2 views
0

У меня есть запрос, который его результат выглядит следующим образом:производящая список списков с помощью LINQ

---------------------------- 
sid name count 
---------------------------- 
1021 o  1 
1021 t  5 
1022 t  10 
1023 h  14 

мой желаемый результат должен быть список, который первый элемент с.и.д. (который является уникальным) и второй элемент должен быть список имя и сосчитать

что-то вроде этого:

[1021, [(o,1), (t,5)]]; [1022, (t,10)] 

я понятия не имею, что делать, может быть, я могу использовать словарь, но я не могу отличить уникальный СВДС. Может кто-нибудь дать мне подсказку? Тпх в пожилом

+2

Похоже, вы хотите 'ToLookup' ... –

+0

tnx за подсказку – someone

+0

возможно использовать' GroupBy'? – Ric

ответ

3

Вы можете сделать это:

var source = new [] 
{ 
    new { sid = 1021, name = "o", count = 1, }, 
    new { sid = 1021, name = "t", count = 5, }, 
    new { sid = 1022, name = "t", count = 10, }, 
    new { sid = 1023, name = "h", count = 14, }, 
}; 

var query = 
    from x in source 
    group new { x.name, x.count } by x.sid; 

Это дает мне это:

query

Если вы специально хотел, чтобы текстовый вывод, то это будет работать:

var query = 
    String.Join("; ", 
     from x in source 
     group new { x.name, x.count } by x.sid into gxs 
     select String.Format("[{0}, [{1}]]", gxs.Key, String.Join(", ", 
      gxs.Select(gx => String.Format("({0},{1})", gx.name, gx.count))))); 

Затем я получаю:

[1021, [(o,1), (t,5)]]; [1022, [(t,10)]]; [1023, [(h,14)]] 
+0

Не могли бы вы дать мне выражение lambda для запроса var = от x в источнике группа new {x.name, x.count} по x.sid; – someone

+0

@joe - 'source.GroupBy (x => x.sid, x => new {x.name, x.count})' – Enigmativity

Смежные вопросы