如何选择DataTable
中列的绝对值之和。我可以使用select语句,例如:
SELECT sum(abs('Position')) FROM 'MyDb'.'MyTable';
在数据库表上。我怎样才能在C#中的DataTable
上做到这一点?
答案 0 :(得分: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"] ));
答案 1 :(得分:0)
Double sum = 0;
foreach(DataRow row in thisTable.Rows)
{
sum += Math.Abs(row["Position"]);
}
答案 2 :(得分: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
答案 3 :(得分: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逻辑作为表达式创建一列,然后对新列求和。
答案 4 :(得分:0)
Int64 total = datatableName.AsEnumerable().Sum(row => row.Field<Int64>("yourcolumn"));
请检查您想要的数据类型,如果在这里分享一些问题,上面给出了负数和正数之和。