Выражение Linq для организации (вроде как Group By, но другое)
Допустим, у меня довольно большой 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 ответа
Да - хочешь Lookup
:
var lookup = list.ToLookup(x => x.Region);
Вы можете создать словарь путем группировки, но лично я предпочитаю использовать поиск, так как он специально разработан для сценария "один ключ, несколько значений".
IList<Foo> foos = //whatever
var groups = foos
.GroupBy(f => f.Region)
.ToDictionary(grp => grp.Key, grp => grp.ToList());
IList<Foo> foos = //whatever
var groups = foos.ToLookup(f => f.Region);
ILookup<T>
похоже на словарь, но каждый ключ ссылается на список значений вместо одного.