2

我有一个数据表,一列包含 int 值。我没有指定任何数据类型的列。当我执行以下操作时。

object sum = dttest.Compute("sum(Value)", "");

我得到以下错误。

聚合函数 Sum() 和类型的使用无效:字符串。

我尝试使用将列值转换为 int

object sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))","");

我又遇到了另一个错误

聚合参数中的语法错误:需要一个可能带有“子”限定符的列参数。

当我为列指定数据类型时,第一个代码将返回正确的值。但就我而言,我无法指定列数据类型。任何人有解决方案?

4

4 回答 4

10

您可以使用 LINQ 到数据表:

 var result = dttest.AsEnumerable()
                    .Sum(x => Convert.ToInt32(x["Value"]));

示例如何Sum获取特定名称:

 var result = dttest.AsEnumerable()
                    .Where(r => r.Field<string>("Name") == "FilterName")
                    .Sum(x => Convert.ToInt32(x["Value"]));
于 2013-06-06T06:38:48.007 回答
1

尝试

object sum = dttest.Compute("Sum(Value)", "[Value] IS NOT NULL");

示例代码

    static DataTable GetTable()
    {
        DataTable table = new DataTable();
        table.Columns.Add("Value", typeof(int));
        table.Columns.Add("Name", typeof(string));
        table.Rows.Add(null, "a");
        table.Rows.Add(50, "a");
        table.Rows.Add(10, "a");
        table.Rows.Add(21, "b");
        table.Rows.Add(100, "b");
        return table;
    }
    static void Main(string[] args)
    {
        DataTable dt =GetTable();
        var str = dt.Compute("Sum(Value)", "Name='a' and Value is not null");
    }

您不能使用 Convert 调用 Sum,但您可以在下面尝试

DataTable dt =GetTable();
dt.Columns.Add("temp", typeof(int), "Convert(Value, 'System.Int32')");
var str = dt.Compute("Sum(temp)", "Name='a' and Value is not null");
于 2013-06-06T06:42:36.407 回答
0

尝试

dttest.Compute("Sum(Convert([Value], 'System.Int32'))","[Value] IS NOT NULL");
于 2013-06-06T06:36:26.340 回答
0

当程序尝试对声明为字符串的数据表列求和时,会发生此错误。
使用以下代码对字符串列进行计算操作。

dtTable.Compute("Sum(Convert(" + col_Name + ", 'System.Int32')",""); 
于 2017-07-26T10:28:08.383 回答