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);
}
错误消息:聚合参数中的语法错误:期望单个列参数可能带有' Child'限定符。
有人可以帮助我吗?
感谢。
答案 0 :(得分:17)
答案 1 :(得分:3)
问题正是关于列的DataType。如果你有一行动态添加了没有DataType的列(可能是手动计算或交叉表查询的结果)
myTable.Columns.Add("AddedColumn");
您可能会遇到列转换问题。 相反,如果您使用下面的指向DataType更改添加方法
myTable.Columns.Add("AddedColumn", typeof(System.Int32));
我认为这会奏效。这就是我的经历和在......之前修好了。
答案 2 :(得分:0)
你想写:
dTable.Compute("sum(CONVERT(ITEM_STOCK, 'System.Double'))",
"ITEM_NO='" + dRow["ITEM_NO"].ToString() + "'")
而不是:
dTable.Compute("sum(" + TotalItem + ")", "ITEM_NO="...
因为它会转换为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");
答案 3 :(得分:0)
就我而言,问题出在我的查询本身。
我的查询返回两列的差。就像query="Select A,B,A-B from Table"
一样,我正在使用计算功能作为dt.Compute("Sum(A-B)","")
对数据表执行求和。
因此,数据表无法计算A-B
列的总和。我给差异列起了别名query="Select A,B,(A-B) as AB from Table"
和dt.Compute("Sum(AB)","")
。
因此,解决了该错误。