You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按OrderNumber和CreatedDate分组转换PartOrders列表结构?

高效实现PartOrders列表的分组转换

最优方案:使用LINQ的GroupBy方法

利用LINQ的GroupBy可以简洁高效地完成分组合并,无需手动遍历判断,代码可读性和执行效率都远优于传统foreach循环。

注意:为避免类名冲突,建议给新旧PartOrders类重命名(比如旧类叫OriginalPartOrders,新类叫GroupedPartOrders),转换代码如下:

// 重命名后的类定义
public class OriginalPartOrders
{
    public string orderNumber{ get; set; }
    public DateTime createdDate { get; set; }
    public string description { get; set; }
    public string name{ get; set; }
    public DateTime performedDateTime { get; set; }
    public Category category { get; set; }
}

public class GroupedPartOrders
{
    public string orderNumber { get; set; }
    public DateTime createdDate { get; set; }
    public List<Data> orderDate { get; set; }
} 

public class Data
{
    public string description { get; set; }
    public string name { get; set; }
    public DateTime performedDateTime { get; set; }
    public Category category { get; set; }
}

public class Category 
{
    public string type { get; set; }
    public string Name { get; set; }
}

// 核心转换逻辑
List<OriginalPartOrders> originalList = GetOriginalPartOrders(); // 替换为你的原始列表

List<GroupedPartOrders> groupedList = originalList
    .GroupBy(o => new { o.orderNumber, o.createdDate }) // 按orderNumber+createdDate组合分组
    .Select(g => new GroupedPartOrders
    {
        orderNumber = g.Key.orderNumber,
        createdDate = g.Key.createdDate,
        orderDate = g.Select(item => new Data
        {
            description = item.description,
            name = item.name,
            performedDateTime = item.performedDateTime,
            // 若需独立的Category实例而非共享引用,可手动深拷贝属性
            category = new Category
            {
                type = item.category.type,
                Name = item.category.Name
            }
        }).ToList()
    })
    .ToList();

关键细节说明

  • 分组逻辑:用匿名类型new { o.orderNumber, o.createdDate }作为分组键,确保两个字段完全匹配的项被归为同一组。
  • 性能优势:LINQ的GroupBy内部基于哈希表实现,时间复杂度为O(n),远优于手动foreach嵌套判断的O(n²),数据量越大优势越明显。
  • 引用类型处理:如果Category是引用类型,直接赋值会导致多个Data对象共享同一实例,需要深拷贝时可按代码示例手动复制属性。

内容的提问来源于stack exchange,提问作者Junior.netare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:45:29