我有一个数据源,包含以下列:
ID | Tile | Score | Type
我在这个数据源中有几行,但感兴趣的是包含类型定义的“类型”列,每行属于,类似于:
1 | Apple | 12 | Pipped
2 | Banana | 34 | Flesh
3 | Kiwi | 32 | Flesh
4 | Orange | -1 | Pipped
5 | Grapes | 3 | Pipped
6 | Potato | 5 | Skinned
我需要将此信息提取到一个集合或KeyValuePair<string, List<Data>>
中,但找不到有效的方法来执行此操作。
我目前正在使用LINQ为每种类型(枚举器)提取集合:
var pipped = (from p in dataSource where p.Type != null && p.Type.Equals(enum.Pipped) select p).ToList();
var flesh = (from p in dataSource where p.Type != null && p.Type.Equals(enum.Flesh) select p).ToList();
var skinned = (from p in dataSource where p.Type != null && p.Type.Equest(enum.Skinned) select p).ToList();
SortedDictionary<string, List<dataSource>> items = new SortedDictionary<string, List<dataSource>>();
items.Add("Pipped", pipped);
items.Add("Skinned", skinned);
items.Add("Flesh", flesh);
必须有更有效的方法来做到这一点吗?
答案 0 :(得分:2)
您希望GroupBy使用ToDictionary,如下所示:
var dictionary = (from x in datasource
where x.Type != null
group x by x.Type into x
select x).ToDictionary(x => x.Key, x => x.ToList());
或者如果你想使用方法语法:
var dictionary = datasource.Where(x => x.Type != null)
.GroupBy(x => x.Type)
.ToDictionary(x => x.Key, x => x.ToList());