聚合参数中的语法错误:期望单个列参数可能'Child'限定符

本文关键字:参数 Child 单个列 语法 错误 期望 | 更新日期: 2023-09-27 17:49:43

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'限定符的单列参数。

有谁能帮我吗?

谢谢。

聚合参数中的语法错误:期望单个列参数可能'Child'限定符

你可以试试:

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

。E将列名用方括号括起来[]

创意来自这篇文章

问题是关于列的DataType。如果您有一个带有动态添加列的行,但没有这样的DataType(它可能是手动计算或类似跨选项卡查询的结果)

myTable.Columns.Add("AddedColumn");

您可能会遇到列转换问题。相反,如果您将add方法更改为指向如下的DataType

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是双精度体,不是列名。

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

在我的情况下,问题是我的查询本身。

我的查询返回两列的差值。例如,query="Select A,B,A-B from Table"和我使用计算函数dt.Compute("Sum(A-B)","")对数据表执行sum。

因此,datatable无法计算A-B列的和。我给差列别名为query="Select A,B,(A-B) as AB from Table"dt.Compute("Sum(AB)","")