2011-03-21 51 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}的差异。你想得到这三个值之间的差异的结果。也许我们可以尝试建议一个实现。