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

如何用LINQ实现指定条件下嵌套子类列表的按日期分组汇总?

用LINQ实现MasterClass的subClass汇总需求

我来帮你搞定这个汇总需求,用LINQ可以很简洁地实现,咱们一步步拆解:

首先先确认下类的定义(和你描述的一致):

public class MasterClass
{
    public string A { get; set; }
    public string B { get; set; }
    public List<subClass> list { get; set; }
}

public class subClass
{
    public DateTime date { get; set; }
    public int NetChange { get; set; }
    public int Shares { get; set; }
    public int HeldPerc { get; set; }
}

接下来是核心的LINQ实现代码,假设你的原始数据列表是List<MasterClass> masterList:

var aggregatedResult = new MasterClass
{
    A = "1",
    B = "1/2",
    list = masterList
        // 第一步:筛选出所有A属性为"1"的MasterClass
        .Where(master => master.A == "1")
        // 第二步:把所有符合条件的subClass列表扁平化为一个集合
        .SelectMany(master => master.list)
        // 第三步:按date字段分组(如果需要忽略时分秒,改成sc => sc.date.Date)
        .GroupBy(sub => sub.date)
        // 第四步:对每个分组的数值字段求和,生成新的subClass对象
        .Select(group => new subClass
        {
            date = group.Key,
            NetChange = group.Sum(sub => sub.NetChange),
            Shares = group.Sum(sub => sub.Shares),
            HeldPerc = group.Sum(sub => sub.HeldPerc)
        })
        // 最后转换成List<subClass>赋值
        .ToList()
};

代码逐步解释:

  • 筛选数据:Where(master => master.A == "1") 只保留A属性为"1"的MasterClass,避免处理无关数据;
  • 扁平化列表:SelectMany(master => master.list) 把多个MasterClass各自的subClass列表合并成一个大的subClass集合,这样才能统一分组;
  • 按日期分组:GroupBy(sub => sub.date) 将同一日期的subClass记录归为一组;如果你的date字段包含时分秒但只需要按年月日汇总,把key改成sub.date.Date即可;
  • 汇总计算:对每个分组,用Sum方法分别计算NetChange、Shares、HeldPerc的总和,生成新的subClass对象存储结果;
  • 转换列表:最后用ToList()把汇总后的结果转换成List,赋值给新MasterClass的list属性。

如果没有找到A="1"的MasterClass,那么汇总后的list会是空列表,这也是符合预期的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:50:32