【问题标题】:Linq Expression to Organize (sorta like Group By but different)用于组织的 Linq 表达式(类似于 Group By 但不同)
【发布时间】:2011-10-29 16:20:27
【问题描述】:

假设我有一个相当大的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 视图呈现一个交互式列表,以这种方式组织,而不必写一些东西比较复杂或者使用第三方库。

【问题讨论】:

  • 嗯。也许我假设 GroupBy 就像 SQL Group By。这对我来说似乎是不正确的。好吧,我想这就是答案!

标签: c# linq collections generic-programming


【解决方案1】:

是的 - 你想要一个Lookup

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

可以通过分组创建字典,但我个人更喜欢使用查找,因为它是专门为“单键多值”场景设计的。

【讨论】:

    【解决方案2】:
    IList<Foo> foos = //whatever
    var groups = foos
        .GroupBy(f => f.Region)
        .ToDictionary(grp => grp.Key, grp => grp.ToList());
    

    【讨论】:

    • 哈,所以它是 GroupBy... 我只是假设这是相对于 SQL Server 的聚合函数。
    【解决方案3】:
    IList<Foo> foos = //whatever
    
    var groups = foos.ToLookup(f => f.Region);
    

    ILookup&lt;T&gt; 类似于字典,但每个键都引用一个值列表,而不仅仅是一个。

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2022-11-22
      • 2011-08-14
      相关资源
      最近更新 更多