假设我有一个相当大的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; }
}
...有没有办法,使用一个相当快速/有效的表达式,按Region
“分组”这些foo项目,所以我可能最终得到IDictionary<string, IList<foo>>
并拥有{{ 1}} key是string
属性,每个下属Region
只包含与该区域匹配的IList<foo>
条记录? (它不一定是foo
,这只是为了说明我正在尝试做的事情的要点。)我想以这种方式组织我的MVC视图的交互式列表,而不必写一些相对复杂的东西或使用第三方库。
答案 0 :(得分:7)
是的 - 您需要Lookup
:
var lookup = list.ToLookup(x => x.Region);
你可以通过分组来创建字典,但我个人更喜欢使用查找,因为它是专门为“单键,多值”场景设计的。
答案 1 :(得分:1)
IList<Foo> foos = //whatever
var groups = foos
.GroupBy(f => f.Region)
.ToDictionary(grp => grp.Key, grp => grp.ToList());
答案 2 :(得分:1)
IList<Foo> foos = //whatever
var groups = foos.ToLookup(f => f.Region);
ILookup<T>
就像字典一样,但每个键都引用一个值列表而不是一个值。