Lev*_*kon 3 c# linq generics lambda
我有一个模型列表,我想组织成一个散列表,其中枚举作为键,模型列表(具有枚举值)作为值.
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));
Run Code Online (Sandbox Code Playgroud)
将列表转换为看起来像这样的哈希表的最简单方法是什么(原谅json):
{
Blue:
[
{ Blue, "How", 1 },
{ Blue, "Brown", 3 }
],
Green:
[
{ Green, "Now", 2 },
{ Green, "Cow", 4 }
]
}
Run Code Online (Sandbox Code Playgroud)
当我做这样的事情时:
var taskTable = tasks.Cast<TaskModel>().ToDictionary(o => o.Task); (Where Task is the Enum)
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:"已经添加了具有相同密钥的项目."
Lambda或Linq的一个衬垫非常受欢迎!
它看起来像你可以做到Lookup:
var lookup = models.ToLookup(o => o.Task);
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的想要Dictionary<MyEnum, List<TaskModel>>:
var dictionary = models.GroupBy(o => o.Task)
.ToDictionary(g => g.Key, g => g.ToList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |