1

の列の絶対値の合計を選択するにはどうすればよいですかDataTable。次のような select ステートメントを使用できます。

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

データベース テーブル上。DataTableC#でそれを行うにはどうすればよいですか?

4

5 に答える 5

2

an にキャストして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

リンクは必要ありません。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

これは1年遅れですが、他の人にとっては役に立つかもしれません.

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できます。

また、計算は 2 段階で行う必要があります。まず、式として 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 に答える