使用LINQ计算与上一项的差异

Nil*_*Pun 3 c# linq

我有一个名为发票清单的LIST,其中包含以下项目.

ID:1
Total:5
Description:Test
Date:2012-01-01
Difference:

ID:2
Total:10
Description:Test
Date:2012-02-01
Difference:

ID:3
Total:15
Description:Test
Date:2012-03-01
Difference: 

ID:4
Total:20
Description:Test
Date:2012-04-01
Difference:
Run Code Online (Sandbox Code Playgroud)

我需要使用LINQ(最好)计算每个发票ID之间的差异.最终输出应如下所示:

 ID:1
    Total:5
    Description:Test
    Date:2012-01-01
    Difference:0

    ID:2
    Total:10
    Description:Test
    Date:2012-02-01
    Difference:5

    ID:3
    Total:15
    Description:Test
    Date:2012-03-01
    Difference: 5

    ID:4
    Total:20
    Description:Test
    Date:2012-04-01
    Difference:5
Run Code Online (Sandbox Code Playgroud)

有人可以建议一下上面最好的方法吗?

Jon*_*eet 7

我怀疑Zip你的朋友在这里:

var withNull = new Invoice[] { null }.Concat(invoices);

var withDifference = withNull.Zip(withNull.Skip(1),
                                  (x, y) => x == null ? y :
                                      new Invoice { 
                                          ID = y.ID,
                                          Total = y.Total,
                                          Date = y.Date,
                                          Difference = y.Total - x.Total
                                      }
                                  )
                             .ToList();
Run Code Online (Sandbox Code Playgroud)

我将解决它是如何工作的(以及为什么你需要null)作为练习 - 如果有必要,我可以提供一些提示......