2016-10-21 4 views
-1

У меня есть следующие List<Dictionary<string, string>> Основные пары:Группировка списка ключей Значение словарей в C# с помощью LINQ

enter image description here

Как бы написать мой запрос Linq, так что у меня есть только 1 словарь, где значения сгруппированы по ключу?

+1

Пытались ли вы что-нибудь? Linq имеет 'GroupBy' и' ToDictionary' –

+1

Предоставьте код, который вы пробовали до сих пор. Какая ошибка вы столкнулись, если таковая имеется? Это не платформа «Comunity, do work for me». – phifi

+0

Также ..... Кажется, вы можете заменить эти словари классом, который имеет 4 свойства. –

ответ

3
var result = data.SelectMany(item => item) 
    .GroupBy(item => item.Key) 
    .ToDictionary(key => key.Key, value => value.Select(i => i.Value).ToList()); 

Для данного входа:

List<Dictionary<string, string>> data = new List<Dictionary<string, string>> 
{ 
    new Dictionary<string, string> 
    { 
     ["Category"] = "99", 
     ["Role"] = "11", 
     ["Level"] = "22", 
     ["BillaleDays"] = "33", 
    }, 
    new Dictionary<string, string> 
    { 
     ["Category"] = "55", 
     ["Role"] = "66", 
     ["Level"] = "77", 
     ["BillaleDays"] = "88", 
    } 
}; 

Результат является:

Category : (99,55) 
Role : (11,66) 
Level : (22,77) 
BillableDays : (33,88) 
+0

@ Josh L - Рад, что он помог :) –

+1

Работает как шарм! Я не использовал функцию .ToDictionary правильно. еще раз спасибо –

2
List<Dictionary<string, string>> data = new List<Dictionary<string,string>> 
{ 
    new Dictionary<string, string> 
    {   
     ["Name"] = "one", 
     ["Age"] = "22" 
    }, 
    new Dictionary<string, string> 
    { 
     ["Name"] = "two", 
     ["Age"] = "88", 
    } 
}; 

var result = data.SelectMany(item => item) 
       .GroupBy(item => item.Key) 
       .ToDictionary(key => key.Key, value => value.Select(i => i.Value).ToList()); 

Выход: Name:"one,"two", Age:"22","88"

+0

Это очень близко к тому, что я хочу, однако я хочу группировать по ключу не значение, так что один ключ имеет несколько значений, связанных с ним. –

+0

вы можете заменить ключ InPlace значения и наоборот словарь <ИНТ Список > тест = образец .GroupBy (г => r.key) .ToDictionary (т => t.value, т => т. Выберите (r => r.value) .ToList()); – Meena

+0

@ Josh Я отредактировал свой ответ в соответствии с вашим требованием, попробуйте его один раз и сообщите мне, есть ли какие-либо проблемы. – Meena

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