我的代码是
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中价格列的数据类型为十进制。
答案 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