C # Преобразование списка <model>в словарьна основе свойства enum в моделях? - PullRequest
3 голосов
/ 28 октября 2011

Не путать с: Как я могу преобразовать List в Hashtable в C #?

У меня есть список моделей, которые я хочу организовать в хеш-таблицу с перечислениями в качестве ключа, и список моделей (которые имеют значение перечисления) в качестве значения.

public enum MyEnum
{
    Blue,
    Green
}

public class MyModel
{
    public MyModel(MyEnum myEnum, string foo, int bar)
    {
        this.MyEnum = myEnum;
        this.Foo = foo;
        this.Bar = bar;
    }

    public MyEnum MyEnum { get; set; }
    public string Foo { get; set; }
    public int Bar { get; set; }
}

List<MyModel> models = new List<MyModel>();

models.Add(new MyModel(MyEnum.Blue, "How", 1));
models.Add(new MyModel(MyEnum.Green, "Now", 2));
models.Add(new MyModel(MyEnum.Blue, "Brown", 3));
models.Add(new MyModel(MyEnum.Green, "Cow", 4));

Какой самый простой способ преобразовать список в хеш-таблицу, которая бы выглядела следующим образом (Простите, json):

{ 
   Blue:
   [
      { Blue, "How", 1 },
      { Blue, "Brown", 3 }
   ],
   Green:
   [
      { Green, "Now", 2 },
      { Green, "Cow", 4 }
   ]
}

Когда я делаю что-то вроде этого:

var taskTable = tasks.Cast<TaskModel>().ToDictionary(o => o.Task); (Where Task is the Enum)

Я получаю это исключение: «Элемент с тем же ключом уже добавлен».

Один лайнер с Lambda или Linq приветствуется!

1 Ответ

6 голосов
/ 28 октября 2011

Мне кажется, что вы могли бы сделать с Lookup:

var lookup = models.ToLookup(o => o.Task);

Или если вы действительно хотите Dictionary<MyEnum, List<TaskModel>>:

var dictionary = models.GroupBy(o => o.Task)
                       .ToDictionary(g => g.Key, g => g.ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...