Linq to Collections Group, возвращая оригинальную сущность - PullRequest
3 голосов
/ 01 февраля 2012

Я группирую коллекцию инструментов, используя следующий код:

 var filteredTools = from t in tools
                               group t by new { t.ModuleName,t.Number}
                               into g
                               select new { ModuleName = g.Key, Values = g };

tools - это простая коллекция, определяемая следующим образом:

List<Tool> tools

После выполнения группировки я получаю 3 строки назад (из 40 строк), поэтому группировка работает. Строки имеют ключ g.Key, а значения - условия группировки. Есть ли в любом случае, чтобы связать его обратно с оригинальными инструментами. Возможно, ключ должен быть уникальным для каждого инструмента, поэтому после выполнения группировки я могу получить оригинальный инструмент из коллекции инструментов.

1 Ответ

7 голосов
/ 01 февраля 2012

Да, инструменты все еще существуют в каждой группе:

foreach (var group in filteredTools) 
{
    // This is actually an anonymous type...
    Console.WriteLine("Module name: {0}", group.ModuleName);
    foreach (Tool tool in group.Values)
    {
        Console.WriteLine("  Tool: {0}", tool);
    }
}

Если честно, вам не нужен анонимный тип для выбора. Вы можете использовать:

var filteredTools = tools.GroupBy(t => new { t.ModuleName,t.Number});
foreach (var group in filteredTools) 
{
    // This is actually an anonymous type...
    Console.WriteLine("Module name: {0}", group.Key);
    foreach (Tool tool in group)
    {
        Console.WriteLine("  Tool: {0}", tool);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...