2011-03-21 120 views
0

如果我要進行總結,我與走在前面:如何計算DataTable的列的差異?

private static double ColumnSummation(DataTable dt, string columnName) 
{ 
    var sum = dt.AsEnumerable().Sum(x => x.Field<double>(columnName)); 
    return sum; 
} 

現在,如果我必須執行列的減法,我怎麼可以繼續,因爲沒有減法擴展方法...有還有其他方式嗎?

請幫

+0

您仍然可以使用Sum()函數,只有其他值應該是負數。 – hallie 2011-03-21 03:49:50

+1

你需要清楚什麼減掉了什麼(第1行減去所有其他行,或者所有行都減去最後一行?) - 這就是沒有標準SUBTRACT聚合函數的原因。求和是確定性的 - 只需添加所有內容 - 但是在減法中,順序是顯着的(a - b <> b - a)。 – 2011-03-21 03:59:14

+2

@hallie,數據庫表不能保證按順序枚舉,並且LINQ的SUM不能保證按順序調用lambda表達式,所以你不能談論「第一」行和「其他」行。一般來說,您不應該將帶有副作用的lambda表達式放入聚合函數中 - 但如果您需要跟蹤「第一」行和「其他」行,則需要引入這樣的副作用。 – 2011-03-21 04:00:12

回答

0

如果你的數據表中列有3個值說{20,30,-10},則其總和是20 + 30-10 = 40。但仔細想想,差異只能之間兩個值。告訴我你如何計算{20,30,-10}的差異。你想得到這三個值之間的差異的結果。也許我們可以嘗試建議一個實現。