2017-06-11 30 views
0

我有列表包含:(無殘留列數據)如何獲得linq中的剩餘價值?

Recive  Pay  Remain 
--------------------------------------------- 
2   0  0 
0   4  0 
3   0  0 
4   0  0 

而且我有initialRecieve=1可變

如何計算C#中的次還列獲得如下的結果?

Recive  Pay  Remain 
--------------------------------------------- 
2   0  3 (initialRecieve+Recive-Pay) 
0   4  -1 (Remain+Recive-Pay) 
3   0  2 (Remain+Recive-Pay) 
4   0  6 (Remain+Recive-Pay) 
+1

到目前爲止,你已經嘗試LINQ是什麼? –

+1

如果'Remain'列是基於'Receive'和'Pay'的*計算列*,那麼爲什麼不用SQL爲此寫一個函數呢? –

+0

我有內存中的文檔列表,我想添加剩餘列值。 OriginalDouments is List

回答

1

簡單地做類似下面:

for (var i = 0; i < DataTable.Rows.Count; i++) 
{ 
    if (i != 0) 
    { 
     DataTable.Rows[i][2] = (DataTable.Rows[i - 1][2] + DataTableRows[i][0]) - DataTable.Rows[i][1]; 
    } 
    else if (i == 0) DataTable.Rows[i][2] = (InitialRecieve + DataTable.Rows[i][0]) - DataTable.Rows[i][1]; 
} 

這應該計算出你需要在內存中的數據是什麼。

2

我創建了一個簡單的控制檯應用程序取決於你所需要的

class doc{ 

    public int Pay{get;set;} 
    public int Receive{get;set;} 
} 

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     List<doc> lst = new List<doc>(); 
     lst.Add(new doc(){Receive=2,Pay=0}); 
     lst.Add(new doc(){Receive=0,Pay=4}); 
     lst.Add(new doc(){Receive=3,Pay=0}); 
     lst.Add(new doc(){Receive=4,Pay=0}); 

     int remain = 1; // initialRecieve=1 
     var result = (from line in lst 
         select new { 
         Receive = line.Receive, 
         Pay = line.Pay, 
         Remain = (remain = remain + line.Receive - line.Pay) 
         }).ToList(); 
     foreach(var item in result){ 
     Console.WriteLine(item); 
     } 
    } 
} 

其結果將是:

{ Receive = 2, Pay = 0, Remain = 3 } 
{ Receive = 0, Pay = 4, Remain = -1 } 
{ Receive = 3, Pay = 0, Remain = 2 } 
{ Receive = 4, Pay = 0, Remain = 6 } 

檢查它DotNetFiddle