Самый быстрый способ построить иерархическую структуру - PullRequest
1 голос
/ 03 апреля 2012

У меня есть источник данных, содержащий следующие столбцы:

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 Ответ

2 голосов
/ 03 апреля 2012

Похоже, вы хотите использовать 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...