我想计算数据表中字符串数据类型列的总和。
我已经尝试过这个:
Int32 omarks = Convert.ToInt32(dt.Compute("Sum(Convert(Marks, 'System.Int32'))", ""));
tbobtained.Text = omarks.ToString();
但是我收到了这个错误:
Aggregate参数中的语法错误:期望具有可能的子限定符的单个列参数。
答案 0 :(得分:2)
这个怎么样:
int omarks = dt.Rows.Select(dr=>(int)dr["Marks"]).Sum();
tbobtained.Text = omarks.ToString();
dr
是lambda函数的参数,它接受数据行(即dr)并返回Marks列的整数值。
如果您想了解此代码的工作原理,您需要梳理LINQ和C# 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
。