Доберитесь сгруппированная запятая разделила значения с linq

Я хотел бы третий столбец "объекты" со значениями, которые сгруппированы.

Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("a", 1);
dic.Add("b", 1);
dic.Add("c", 2);
dic.Add("d", 3);

var dCounts =
    (from i in dic
    group i by i.Value into g
    select new { g.Key, count = g.Count()});

    var a = dCounts.Where(c => c.count>1 );

dCounts.Dump();
a.Dump();

Этот код приводит к:

Key Count
1   2
2   1
3   1

Я хотел бы эти результаты:

Key Count Items
1   2     a, b
2   1     c
3   1     d
7
задан Micah B. 13 July 2010 в 17:06
поделиться

3 ответа

    var dCounts =
        (from i in dic
            group i by i.Value into g
            select new { g.Key, count = g.Count(), Items = string.Join(",", g.Select(kvp => kvp.Key)) });

Используйте string.Join (",", {array}) , передав свой массив ключей.

10
ответ дан 6 December 2019 в 23:00
поделиться

Вы можете использовать:

var dCounts = 
    from i in dic 
    group i by i.Value into g 
    select new { g.Key, Count = g.Count(), Values = g }; 

Результат, созданный группировкой (значение g ), имеет свойство Key , которое дает вам ключ, но также реализует IEnumerable < T> , который позволяет вам получить доступ к отдельным значениям в группе. Если вы вернете только g , вы можете перебрать все значения с помощью foreach или обработать их с помощью LINQ.

Вот простая функция дампа, чтобы продемонстрировать это:

foreach(var el in dCounts) {
  Console.Write(" - {0}, count: {1}, values:", el.Key, el.Count);
  foreach(var item in el.Values) Console.Write("{0}, ", item);
|
1
ответ дан 6 December 2019 в 23:00
поделиться
from i in dic 
group i.Key by i.Value into g 
select new
{
  g.Key,
  count = g.Count(),
  items = string.Join(",", g.ToArray())
});
0
ответ дан 6 December 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: