Не следует путать: Как преобразовать 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 models = new List();
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().ToDictionary(o => o.Task); (Where Task is the Enum)
Я получаю это исключение: «Элемент с тем же ключом уже добавлен».
Один лайнер с Lambda или Linq оценен!
Мне кажется, что вы можете сделать с Lookup
:
var lookup = models.ToLookup(o => o.Task);
Or if you really want the Dictionary
:
var dictionary = models.GroupBy(o => o.Task)
.ToDictionary(g => g.Key, g => g.ToList());