构建层次结构的最快方法

时间:2012-04-03 19:08:09

标签: linq linq-to-entities

我有一个数据源,包含以下列:

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);

必须有更有效的方法来做到这一点吗?

1 个答案:

答案 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());