DataTable distinctTable = dTable.DefaultView.ToTable(true,"ITEM_NO","ITEM_STOCK");
DataTable dtSummerized = new DataTable("SummerizedResult");
dtSummerized.Columns.Add("ITEM_NO",typeof(string));
dtSummerized.Columns.Add("ITEM_STOCK",typeof(double));
int count=0;
foreach(DataRow dRow in distinctTable.Rows)
{
count++;
//string itemNo = Convert.ToString(dRow[0]);
double TotalItem = Convert.ToDouble(dRow[1]);
string TotalStock = dTable.Compute("sum(" + TotalItem + ")", "ITEM_NO=" + dRow["ITEM_NO"].ToString()).ToString();
dtSummerized.Rows.Add(count,dRow["ITEM_NO"],TotalStock);
}
Run Code Online (Sandbox Code Playgroud)
错误消息:聚合参数中的语法错误:期望具有可能的"子"限定符的单个列参数.
有人可以帮帮我吗?
谢谢.
小智 17
你可以试试这个:
dTable.Compute("sum([" + TotalItem + "])","");
Run Code Online (Sandbox Code Playgroud)
即将您的列名括在方括号[]中
这个想法来自这篇文章.
你想写:
dTable.Compute("sum(CONVERT(ITEM_STOCK, 'System.Double'))",
"ITEM_NO='" + dRow["ITEM_NO"].ToString() + "'")
Run Code Online (Sandbox Code Playgroud)
代替:
dTable.Compute("sum(" + TotalItem + ")", "ITEM_NO="...
Run Code Online (Sandbox Code Playgroud)
因为它将转换为dTable.Compute("sum(value_of_TotalItem), "ITEM_NO="...,value_of_TotalItem是一个双精度值,而不是列名。
尝试这个:
DataTable distinctTable = dTable.Clone();
dTable.Columns.Add("ITEM_STOCK_D", typeof(Decimal),
"CONVERT(ITEM_STOCK, 'System.Decimal')");
foreach (DataRow dRow in dTable.Rows)
{
String itemNo = dRow["ITEM_NO"].ToString();
if(distinctTable.Select(String.Format("ITEM_NO = '{0}'",itemNo)).Length == 0)
{
double totalStock = Convert.ToDouble(dTable.Compute("SUM(ITEM_STOCK_D)",
String.Format("ITEM_NO = '{0}'", itemNo)));
distinctTable.Rows.Add(itemNo, totalStock.ToString());
}
}
dTable.Columns.Remove("ITEM_STOCK_D");
Run Code Online (Sandbox Code Playgroud)