如何获得数据表列的绝对值之和

时间:2016-11-21 08:49:38

标签: c# asp.net datatables

我有以下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Data;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here         
            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 < 10"));
            Console.WriteLine(a);
        }
    }
}

它会将op设为2,两个+ ve都将被添加,-ve one将被减去。我需要4作为OP。我的意思是绝对值。怎么做?

3 个答案:

答案 0 :(得分:1)

你的问题有点模糊。想象一下,你有

 -20, 1, -2 

如果您想3 == 1 + |-2|(请注意-20 排除并且我们按绝对值过滤)你可以把 Linq 看起来很直接

var result = dt
  .AsEnumerable()
  .Select(record => Math.Abs(Convert.ToInt32(record["Column1"])))
  .Where(item => item < 10)
  .Sum();

如果您需要23 == |-20| + 1 + |-2|(请注意-20保留并且我们按进行过滤)您可以将< / p>

var result = dt
  .AsEnumerable()
  .Select(record => Convert.ToInt32(record["Column1"]))
  .Where(item => item < 10)
  .Sum(item => Math.Abs(item));
复杂查询中的

编辑(请参阅下面的评论)我建议使用匿名类

var result = dt
  .AsEnumerable()
  .Select(record => new {
     Column1 = Convert.ToInt32(record["Column1"]),
     Column2 = Convert.ToString(record["Column2"]) }) 
  .Where(item => item.Column2 == "A" || item.Column2 == "B")
  .Where(item => item.Column1 < 10) 
  .Sum(item => Math.Abs(item.Column1));

答案 1 :(得分:0)

您可以使用LINQ

var yourSum =dt.AsEnumerable()
    .Where( y => y.Field<int>( "Column1" )  < 10 )
    .Sum( x => x.Field<int>( "Column1" ) );

答案 2 :(得分:0)

您可以使用LINQ。

var result = dt.AsEnumerable()
                .Where(x => Convert.ToInt32(x["Column1"]) < 10)
                .Sum(x => Math.Abs(Convert.ToInt32(x["Column1"])));