sum数据表的字符串数据类型

时间:2012-03-13 21:17:15

标签: c# .net

我想计算数据表中字符串数据类型列的总和。

我已经尝试过这个:

Int32 omarks = Convert.ToInt32(dt.Compute("Sum(Convert(Marks, 'System.Int32'))", ""));
tbobtained.Text = omarks.ToString();

但是我收到了这个错误:

Aggregate参数中的语法错误:期望具有可能的子限定符的单个列参数。

2 个答案:

答案 0 :(得分:2)

这个怎么样:

int omarks = dt.Rows.Select(dr=>(int)dr["Marks"]).Sum();
tbobtained.Text = omarks.ToString();

dr是lambda函数的参数,它接受数据行(即dr)并返回Marks列的整数值。

如果您想了解此代码的工作原理,您需要梳理LINQC# lambda expressions

答案 1 :(得分:0)

它必须不喜欢嵌套的函数调用,即使documentation of the expression syntax没有提到任何问题。

我尝试将对Convert()的调用解压缩到这样的计算列中......

static void Main(string[] args)
{
    int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    DataTable dt = CreateDataTable(data);
    int omarks = Convert.ToInt32(dt.Compute("Sum(MarksInt)", ""));
    string text = omarks.ToString();

    Console.WriteLine(omarks == data.Sum());
}

static DataTable CreateDataTable(IEnumerable<int> data)
{
    DataTable table = new DataTable();

    table.Columns.Add("Marks", typeof(string));
    table.Columns.Add("MarksInt", typeof(int), "Convert(Marks, 'System.Int32')");

    foreach (int i in data)
    {
        DataRow row = table.NewRow();

        row["Marks"] = i.ToString();

        table.Rows.Add(row);
    }

    return table;
}

...并且执行时不会抛出Exception并正确打印true