聚合函数Mean()和Type:String的使用无效

时间:2011-10-03 05:28:14

标签: c# asp.net

我的代码是

DataTable dtNew = new DataTable();
object o2 = dtAll.Compute("MIN(Price)", string.Empty);
object o1 = dtAll.Compute("AVG(Price)",string.Empty);    

最小返回最小..这很好用。但平均生成错误

“聚合函数Mean()和Type:String的使用无效。”

sql server中价格列的数据类型为十进制。

1 个答案:

答案 0 :(得分:2)

您的问题似乎是Price列中的数据。我的预感是该列将Price存储为文本;因此,当您致电Min(Price)时工作完全正常,因为MIN是为strings定义的,但当您{cal AVG不喜欢它时,因为它不知道如何计算一堆字符串的平均值。

总之,请确保Price列的数据类型是一个数字,并且您的代码应该正常工作,因为它没有任何问题。

修改

证明我的观点:

DataTable t = new DataTable();
t.Columns.Add("Price");
t.Columns["Price"].DataType=typeof(string);

for (int i = 0; i < 10; i++)
{
    DataRow r = t.NewRow();
    r.ItemArray=new object[]{i};
    t.Rows.Add(r);
}

object min = t.Compute("MIN(Price)",string.Empty);
Console.WriteLine("Min: " +min); //PRINTS Min: 0
try
{
    object avg = t.Compute("AVG(Price)", string.Empty);
    Console.WriteLine("AVG: "+avg);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

打印:

  

最小值:0

     

聚合函数Mean()和Type:String。

的使用无效

强制数据类型为int:

t.Columns["Price"].DataType=typeof(int); 

现在打印:

  

最小值:0

     

AVG:4