sowinworkTwo 2025-01-20 17:52 采纳率: 100%
浏览 14
已结题

C# 使用Linq的分组统计问题

C# 使用Linq的分组统计问题 ,具体见下图,我是新手。请尽可能详细,谢谢。

img

  • 写回答

4条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    针对你给出的两个示例,看起来你想根据姓名和地区对DataTable中的数据进行分组,然后提取每个分组的最新评论时点。在C#中,你可以使用LINQ来轻松实现这个需求。假设你的DataTable已经被转换为一个可枚举的数据结构(例如List或数组),那么可以使用以下LINQ查询来实现你想要的结果。以下是基于你的描述的示例代码:

    首先,确保你已经引入了必要的命名空间:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data; // 如果你使用的是DataTable的话需要引入这个命名空间
    

    针对图1的问题,假设你有一个包含评论时点的DataTable并且你想要按姓名和地区分组提取最后的评论时间。可以使用如下代码实现:

    // 假设dataTable是已经存在的DataTable对象,并且包含了你给出的列数据
    DataTable dataTable = new DataTable(); // 你的实际DataTable需要填充数据
    
    // 将DataTable转换为可枚举的数据结构(例如List<DataRow>)以便使用LINQ查询
    List<DataRow> dataRows = dataTable.AsEnumerable().ToList();
    
    // 使用LINQ查询按姓名和地区分组,并取出每组最新的评论时点
    var result = from row in dataRows
                 group row by new { row.Field<string>("姓名"), row.Field<string>("地区") } into groupedRows
                 select new 
                 {
                     序号 = groupedRows.Key.序号, // 按原始序号进行标识,可以根据需要调整这部分逻辑
                     姓名 = groupedRows.Key.姓名,
                     地区 = groupedRows.Key.地区,
                     评论时点 = groupedRows.Max(r => r.Field<DateTime>("评论时点")) // 取分组中的最大日期作为最新评论时点(假设日期是唯一的)
                 };
    
    // 输出或处理结果,比如转换成DataTable再次展示结果(如果需要)等。例如转换成列表或数组形式展示。
    

    对于图2的情况,处理方式与图1相同,只是描述略有不同。基本的逻辑是一样的,先分组再提取每组中的最大日期作为最新的评论时点。根据数据的实际情况可能需要适当调整日期比较逻辑(例如处理时间部分)。如果评论时点包含时间部分并且你想要基于完整的时间戳来比较最新的评论,上面的代码应该可以满足需求。如果评论时点仅包含日期部分而没有时间部分,则需要考虑如何处理日期与时间的比较。你可能需要使用DateTime的其他属性或方法来处理时间的比较逻辑。如果有更具体的格式问题或者其它特殊要求,请提供更详细的信息以便得到更准确的解答。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月29日
  • 已采纳回答 1月21日
  • 创建了问题 1月20日