要组织的Linq表达式(有点像分组但不同)

时间:2011-10-29 16:20:28

标签: c# linq collections generic-programming

假设我有一个相当大的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视图的交互式列表,而不必写一些相对复杂的东西或使用第三方库。

3 个答案:

答案 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>就像字典一样,但每个键都引用一个值列表而不是一个值。