聚合参数中的语法错误:期望具有可能的“子”限定符的单个列参数

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); } 

错误消息:聚合参数中的语法错误:期望具有可能的“子”限定符的单个列参数。

有人可以帮帮我吗?

谢谢。

你可以试试这个:

 dTable.Compute("sum([" + TotalItem + "])",""); 

即将您的列名括在方括号[]中

这个想法来自这篇文章 。

问题正是关于列的DataType。 如果你有一行动态添加没有DataType的列(可能是手动计算或交叉表查询的结果)

 myTable.Columns.Add("AddedColumn"); 

您可能会遇到列转换问题。 相反,如果您使用指向DataType更改add方法,如下所示

 myTable.Columns.Add("AddedColumn", typeof(System.Int32)); 

我认为它会起作用。 这是我之前经历和修复的……

你想写:

 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是一个double,而不是列名。

请参见DataTable.Compute

更新:

试试这个:

 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");