我想在a中显示客户的会计历史记录DataGridView,我希望有一个列显示其余额的运行总计.我这样做的旧方法是获取数据,循环数据,逐行添加行DataGridView并计算当时的运行总数.瘸.我宁愿使用LINQ to SQL,或LINQ如果不能使用LINQ to SQL,来计算运行总数,这样我就可以设置DataGridView.DataSource为我的数据.
这是我正在拍摄的一个超级简化的例子.说我有以下课程.
class Item
{
public DateTime Date { get; set; }
public decimal Amount { get; set; }
public decimal RunningTotal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要一个可以生成如下结果的L2S或LINQ语句:
Date Amount RunningTotal
12-01-2009 5 5
12-02-2009 -5 0
12-02-2009 10 10
12-03-2009 5 15
12-04-2009 -15 0
Run Code Online (Sandbox Code Playgroud)
请注意,可能有多个具有相同日期的项目(12-02-2009).在计算运行总计之前,应按日期对结果进行排序.我猜这意味着我需要两个语句,一个用于获取数据并对其进行排序,另一个用于执行运行总计算.
我希望Aggregate能做到这一点,但它并不像我希望的那样有效.或者也许我只是想不出来.
这个问题似乎跟我想要的一样,但我不知道接受/唯一的答案是如何解决我的问题的.
关于如何解决这个问题的任何想法?
编辑 结合Alex和DOK的答案,这就是我最终得到的结果:
decimal runningTotal = 0;
var results = FetchDataFromDatabase()
.OrderBy(item => item.Date)
.Select(item => new …Run Code Online (Sandbox Code Playgroud)