我有以下代码
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 no 将被添加,-ve one 将被减去。我需要 4 个作为 OP。我的意思是所有的abs值。怎么做?
最佳答案
你的问题有点模糊。想象一下你有
-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
被保留,并且我们按值进行过滤)您可以将
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));
关于c# - 如何获取数据表各列的绝对值之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716003/