【问题标题】:Grouping set of results using linq in C# [duplicate]在C#中使用linq对结果集进行分组[重复]
【发布时间】:2017-04-12 15:32:03
【问题描述】:

我有一个结果集,我从执行我正在使用的存储过程中返回。例如,结果集如下所示:

 var staff = new Staff[]
        {
            new Staff{Code = 5, Name = "Sam", Team = "AB1"},
            new Staff{Code = 6, Name = "Dave", Team="RAB"},
            new Staff{Code = 6, Name = "Dave", Team="ABC"},
        };

根据我正在处理的数据集,一名员工可以在多个团队中工作。

我想要做的是将它们分组以显示如下结果:

Value  ChildValues
Dave   [RAB, ABC]
Sam    [AB1]

我怎样才能做到这一点?我通过复制主列表尝试了以下操作,但我知道以下内容不正确:

 var query = staff.GroupJoin(staff, s => s.Code, 
            s => s.Code, (s, result) => new StaffResult(s.Name, result));

感谢您对上述内容的帮助。

【问题讨论】:

标签: c# linq


【解决方案1】:

尝试以下查询:

var staff = new Staff[]
        {
            new Staff{Code = 5, Name = "Sam", Team = "AB1"},
            new Staff{Code = 6, Name = "Dave", Team="RAB"},
            new Staff{Code = 6, Name = "Dave", Team="ABC"},
        };

        var grouped = staff.GroupBy(m => m.Name)
            .Select(p => new { Value = p.Key, ChildVlues = p.Select(m => m.Team) })
            .ToList();

这里我按Name 分组。然后我创建了新的匿名类型并将组的Key(代表名称)添加到Value。我还添加了p.Select(m => m.Team)ChildValues,因为您想要收集姓名。

【讨论】:

    【解决方案2】:

    您应该使用GroupBy 方法来实现这一点。

    var grouped = staff.GroupBy(x=>x.Name, x=>x.Team);
    

    该语句按名称对您的数据进行分组,每个分组都会保留 Teams。

    您可以在这里找到更多信息https://msdn.microsoft.com/en-us/library/bb545971.aspx?f=255&MSPPError=-2147217396

    希望对你有帮助。

    【讨论】:

    • 当然,更新答案
    【解决方案3】:

    查看 Linq 中的 GroupBy 语句:

    https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx

    看起来像

    var groupedStaff = staff.GroupBy(s=>s.Name, s=>S.Team);
    

    这为您提供了一个分组,如果需要,您可以通过 foreach 或其他 linq 查询访问该分组

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多