makoshen 2021-09-27 14:53 采纳率: 100%
浏览 28
已结题

求list集合中,名称相同的相邻记录间的累计运算,语句怎么写?

数据库里读出的数据tolist()后,如下表


CId     时间          合计数量    
1    2021-9-1                 10         
1    2021-9-5                 20          
1    2021-9-11               -5        
2    2021-9-15                5           
2    2021-9-20               -5        
2    2021-9-20               10  
3    2021-9-21               10  

希望得到的结果集如下

CId     时间            累计数量    
1    2021-9-1                10         
1    2021-9-5                30          
1    2021-9-11              25       
2    2021-9-15               5           
2    2021-9-20               0       
2    2021-9-20              10  
3    2021-9-21              10  

请问如何将名称相同的相邻两个记录间,合计数量相加显示在对应的累计数量中

  • 写回答

2条回答 默认 最新

  • wanghui0380 2021-09-27 17:51
    关注

    开胃菜:sql开窗统计本身可以
    https://www.cnblogs.com/Lumia1020/p/5439982.html

    回到你的题目,我们其实很多种方式完成,不过为了不引入其他方式,我们就用最传统的方式完成

    static IEnumerable<T> test<T,Tkey>(IEnumerable<T> lst, Func<T, Tkey> func, Func<T, T, T> funm)
            {
                var l = lst.GroupBy(func);
                foreach (var grouping in l)
                {
                    var r = test1(grouping, funm);
    
                    foreach (var item in r)
                        yield return item;
                }
            }
    
            static IEnumerable<T> test1<T>(IEnumerable<T> lst, Func<T, T, T> func)
            {
    
                T temp = lst.First();
                yield return temp;
    
                foreach (var x1 in lst.Skip(1))
                {
    
    
                    temp = func(temp, x1);
    
                    yield return temp;
                }
            }
     List<A> list = new List<A>();
                list.Add(new A() { id = 1, name = "a", value = 10 });
                list.Add(new A() { id = 1, name = "a1", value = 20 });
                list.Add(new A() { id = 1, name = "a2", value = -5 });
                list.Add(new A() { id = 2, name = "a3", value = 5 });
                list.Add(new A() { id = 2, name = "a4", value = -5 });
                list.Add(new A() { id = 2, name = "a5", value = 10 });
                list.Add(new A() { id = 3, name = "a6", value = 10 });
                var resault = test(list,p=>p.id, (a1, a2) =>
                {
                    a2.value = a1.value + a2.value;
                    return a2;
                }).ToList();
    
                foreach (var a in resault)
                {
                    Console.WriteLine($"{a.name}\t{a.value}");
                }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月6日
  • 已采纳回答 9月28日
  • 创建了问题 9月27日

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100