c# - 将数据分组到单列并合并另一列

标签 c# linq

我有一组具有以下列的对象

Id
ShiftStart
ShiftEnd

一组示例数据

Id  ShiftStart  ShiftEnd
1   8.30        12.00
1   13.30       15.00
2   8.30        12.00
2   13.30       15.00
3   8.30        12.00

我想要实现的是,

选择所有具有匹配 id 的项目,然后合并类次数据。用逗号分隔

因此示例最终对象将包含以下数据

Id  ShiftStart    ShiftEnd
1   8.30, 13.30   12.00, 15.00    
2   8.30, 13.30   12.00, 15.00
3   8.30          12.00

最佳答案

按 ID 分组,然后将每个组内的所有时间连接在一起:

var groupedData
  = yourList.GroupBy(x => x.Id)
            .Select(g => new { Id = g.Key,
                               ShiftStartTimes = string.Join(", ", g.Select(x => x.ShiftStart))
                               ShiftEndTimes = string.Join(", ", g.Select(x => x.ShiftEnd)) });

查询语法:

var groupedData =
    from x in yourList
    group x by x.Id into g
    select new {
       Id = g.Key,
       ShiftStartTimes = String.Join(", ", g.Select(x => x.ShiftStart)),
       ShiftEndTimes = String.Join(", ", g.Select(x => x.ShiftEnd))
   };

关于c# - 将数据分组到单列并合并另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22325406/

相关文章:

c# - 遍历 string[] List<string> 按字母顺序获取结果

c# - 除以两个整数不返回预期结果

c# - 将项目加入单个列表<>

c# - 如何将自定义菜单项添加到现有应用程序?

c# - Visual Studio 2010 SP1 破坏了东西?

c# - Ef core LazyLoading - 访问类型集合的嵌套导航属性抛出 DetachedLazyLoadingWarning 错误

c# - 自建的Node <T>\List <T>类到系统节点和列表之间的C#模糊引用

c# - LINQ - 返回列表中的列表

c# - 使用内连接和左外连接将 6 个表连接在一起 - LINQ

c# - 如何在不对列进行硬编码的情况下在 LINQ 中转换数据