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

C#如何优雅实现Transaction列表到PersonStats列表的类型转换

实现方案

你可以通过LINQ的分组操作非常简洁地完成转换,不需要复杂的循环逻辑:

前置依赖

需要先引入LINQ命名空间:

using System.Linq;

核心转换代码

List<PersonStats> personStatsList = transactions
    // 按姓名组合作为分组键,保证同一个人的记录归为一组
    .GroupBy(t => new { t.FirstName, t.LastName })
    .Select(group =>
    {
        // 可选:按日期升序排序,保证日期和里程数组的顺序是时间先后顺序
        var sortedRecords = group.OrderBy(t => t.Date).ToList();
        return new PersonStats(
            firstName: group.Key.FirstName,
            lastName: group.Key.LastName,
            dates: sortedRecords.Select(t => t.Date).ToArray(),
            kilomtersWalked: sortedRecords.Select(t => t.KilometersWalked).ToArray()
        );
    })
    .ToList();

补充说明

  • 如果你的业务场景不需要保证日期的先后顺序,可以去掉OrderBy排序步骤,直接操作分组内的原始数据即可,性能更高
  • 分组键使用FirstName和LastName的组合匿名类,避免出现同姓不同名、同名不同姓的用户被错误分到同一组的问题
  • 如果后续需要扩展PersonStats的统计属性(比如总步行里程、日均里程等),可以直接在Select投影逻辑中通过group.Sum(t => t.KilometersWalked)、group.Average(t => t.KilometersWalked)等方法直接计算,不需要额外遍历

内容的提问来源于stack exchange,提问作者Mads

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:04