Выражение Linq для организации (вроде как Group By, но другое) - PullRequest
1 голос
/ 29 октября 2011

Допустим, у меня довольно большое IList<foo>, где foo выглядит так:

public class foo
{
    public string Region { get; set; }
    public string Territory { get; set; }
    public string Location { get; set; }
    public string Person { get; set; }
}

... есть ли способ, используя достаточно быстрое / эффективное выражение, "сгруппировать" эти элементы foo по Region, так что я мог бы получить IDictionary<string, IList<foo>>, и ключ string будет Region свойство, где каждый подчиненный IList<foo> содержит только foo записи, которые соответствуют этому региону? (это не должно быть IDictionary, это просто для иллюстрации сути того, что я пытаюсь сделать.) Я хочу представить интерактивный список в моем виде MVC, организованном таким образом, без необходимости что-то писать относительно сложная или использовать стороннюю библиотеку.

Ответы [ 3 ]

7 голосов
/ 29 октября 2011

Да - вы хотите Lookup:

var lookup = list.ToLookup(x => x.Region);

Вы можете создать словарь путем группировки, но лично я предпочитаю использовать поиск, так как он специально разработан для сценария "один ключ, несколько значений".

1 голос
/ 29 октября 2011
IList<Foo> foos = //whatever

var groups = foos.ToLookup(f => f.Region);

ILookup<T> подобен словарю, но каждый ключ ссылается на список значений вместо одного.

1 голос
/ 29 октября 2011
IList<Foo> foos = //whatever
var groups = foos
    .GroupBy(f => f.Region)
    .ToDictionary(grp => grp.Key, grp => grp.ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...