lee.2m 2025-04-01 23:25 采纳率: 97.5%
浏览 56
已采纳

C# LINQ GroupBy 如何按多个字段分类汇总并排序?

如何使用C# LINQ GroupBy按多个字段分类汇总数据,并根据汇总结果进行排序?
  • 写回答

1条回答 默认 最新

  • Qianwei Cheng 2025-04-01 23:25
    关注

    1. 基础概念:C# LINQ GroupBy 的基本用法

    在C#中,LINQ(Language Integrated Query)是一种强大的查询工具,可以用于操作集合数据。GroupBy 是 LINQ 中的一个关键方法,用于根据指定的键对数据进行分组。

    假设我们有一个包含销售记录的列表,每个记录包括地区、产品类型和销售额:

    
    var sales = new List<Sale> {
        new Sale { Region = "North", ProductType = "Electronics", Amount = 100 },
        new Sale { Region = "South", ProductType = "Electronics", Amount = 200 },
        new Sale { Region = "North", ProductType = "Clothing", Amount = 150 },
        new Sale { Region = "South", ProductType = "Clothing", Amount = 300 }
    };
    

    我们可以使用简单的 GroupBy 按照一个字段(如地区)进行分组:

    
    var groupedByRegion = sales.GroupBy(s => s.Region);
    

    2. 进阶技巧:按多个字段分类汇总数据

    为了实现按多个字段(例如地区和产品类型)进行分类汇总,我们需要传递一个匿名对象作为分组键:

    
    var multiFieldGrouped = sales.GroupBy(
        s => new { s.Region, s.ProductType }, // 分组键
        (key, group) => new { 
            Region = key.Region, 
            ProductType = key.ProductType, 
            TotalAmount = group.Sum(g => g.Amount) // 汇总逻辑
        }
    );
    

    上述代码将生成一个新的集合,其中每个元素代表一组特定地区的特定产品类型的汇总结果。

    3. 高级应用:根据汇总结果进行排序

    完成分组和汇总后,通常需要根据某些条件对结果进行排序。例如,按照总销售额从高到低排序:

    
    var sortedResults = multiFieldGrouped.OrderByDescending(g => g.TotalAmount);
    

    完整的代码示例如下:

    
    var results = sales
        .GroupBy(s => new { s.Region, s.ProductType },
                 (key, group) => new { 
                     Region = key.Region, 
                     ProductType = key.ProductType, 
                     TotalAmount = group.Sum(g => g.Amount) 
                 })
        .OrderByDescending(g => g.TotalAmount)
        .ToList();
    

    4. 实际案例分析与解决方案

    假设我们需要处理以下数据:

    RegionProductTypeAmount
    NorthElectronics100
    SouthElectronics200
    NorthClothing150
    SouthClothing300
    EastGroceries50
    WestGroceries75
    NorthGroceries200
    SouthGroceries100
    EastElectronics300
    WestClothing125

    我们可以使用上述方法对这些数据进行分组、汇总和排序。

    5. 流程图说明

    以下是整个过程的流程图:

    graph TD;
        A[原始数据] --> B{GroupBy};
        B --> C[按多个字段分组];
        C --> D[计算汇总值];
        D --> E{OrderByDescending};
        E --> F[排序后的结果];
    

    通过以上步骤,您可以轻松实现复杂的分组、汇总和排序操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 4月1日