我有以下代码
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。我的意思是绝对值。怎么做?
答案 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"])));