1

如何选择 a 中列的绝对值之和DataTable。我可以使用 select 语句,例如:

SELECT sum(abs('Position')) FROM 'MyDb'.'MyTable';

在数据库表上。我怎样才能DataTable在 C# 中做到这一点?

4

5 回答 5

2

转换为IEnumerable<DataRow>并使用 linq

IEnumerable<DataRow> rows = table.Rows.Cast<DataRow>();
var amounts = rows.Select(r => Maths.Abs( (int) r["Position"] ));
var sum = amounts.Sum();

并链接:

return 
 table.Rows.Cast<DataRow>()
 .Sum(r => Math.Abs( (int) r["Position"] ));
于 2012-11-12T20:06:47.787 回答
0

这晚了一年,但它可能对其他人有用。

Dim i As Integer
Dim t As Type = i.GetType
tbl.Columns.Add("abs", t, "(iif(col<0,-col,col))")
Dim sumAbs As Integer = tbl.Compute("sum(abs)", "")

不支持ABS功能,但可以用IIF DIY。

此外,您必须分两个阶段进行计算。首先使用 IIF 逻辑作为表达式创建一列,然后对新列求和。

于 2013-11-01T13:36:22.887 回答
0
Double sum = 0;
foreach(DataRow row in thisTable.Rows)
{
    sum += Math.Abs(row["Position"]);
}
于 2012-11-12T20:06:15.550 回答
0

不需要linq。可以使用Compute方法。

dt.Compute("SUM(Column1)", "Column1>0")  

完整的工作示例:

            DataTable dt = new DataTable();
            dt.Columns.Add("Column1");
            dt.Columns["Column1"].DataType = typeof(Int32);
            dt.Rows.Add(1);
            dt.Rows.Add(2);
            dt.Rows.Add(-1);
            int a = Convert.ToInt32(dt.Compute("SUM(Column1)", "Column1>0"));
            Console.WriteLine(a);  //Will print 3
于 2012-11-12T20:13:46.570 回答
0
 Int64 total = datatableName.AsEnumerable().Sum(row => row.Field<Int64>("yourcolumn"));

请检查您想要的数据类型,如果某些问题让我们在这里分享上面给您负数和正数的总和。

于 2016-05-12T10:17:48.890 回答