c# – LINQ to SQL和有序结果的运行总计

我想在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; }
}

我想要一个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

请注意,可以有多个具有相同日期的项目(12-02-2009)。结果应该在计算运行总量之前按日期排序。我猜这意味着我需要两个语句,一个获取数据和排序,一秒钟执行运行总计算。

我希望Aggregate会做的伎俩,但它不工作,我希望。或者我可能不知道。

question似乎是同样的事情,我想,但我不知道如何接受/唯一的答案解决我的问题。

任何想法如何拉这个?

编辑
从亚历克斯和DOK的答案,这是我结束了:

decimal runningTotal = 0;
var results = FetchDataFromDatabase()
    .OrderBy(item => item.Date)
    .Select(item => new Item
    {
        Amount = item.Amount,
        Date = item.Date,
        RunningTotal = runningTotal += item.Amount
    });
使用闭包和匿名方法:

List<Item> myList = FetchDataFromDatabase();

decimal currentTotal = 0;
var query = myList
               .OrderBy(i => i.Date)
               .Select(i => 
                           {
                             currentTotal += i.Amount;
                             return new { 
                                            Date = i.Date, 
                                            Amount = i.Amount, 
                                            RunningTotal = currentTotal 
                                        };
                           }
                      );
foreach (var item in query)
{
    //do with item
}
http://stackoverflow.com/questions/1834753/linq-to-sql-and-a-running-total-on-ordered-results

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – LINQ to SQL和有序结果的运行总计