我有一个数据表,一列包含int值。我没有使用任何数据类型指定列。当我执行以下操作时。
object sum = dttest.Compute("sum(Value)", "");
我收到以下错误。
聚合函数Sum()和Type:String。
的使用无效
我尝试使用
将列值转换为intobject sum = dttest.Compute("sum(Convert(Value, 'System.Int32'))","");
我又得到了另一个错误
聚合参数中的语法错误:期望单列参数 可能有'儿童'资格。
当我指定列的数据类型时,第一个代码将返回正确的值。但在我的情况下,我无法指定列数据类型。有人有解决方案吗?
答案 0 :(得分:8)
您可以使用LINQ to Datatable:
var result = dttest.AsEnumerable()
.Sum(x => Convert.ToInt32(x["Value"]));
如何Sum
具体名称的示例:
var result = dttest.AsEnumerable()
.Where(r => r.Field<string>("Name") == "FilterName")
.Sum(x => Convert.ToInt32(x["Value"]));
答案 1 :(得分:1)
试
object sum = dttest.Compute("Sum(Value)", "[Value] IS NOT NULL");
示例代码
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Value", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(null, "a");
table.Rows.Add(50, "a");
table.Rows.Add(10, "a");
table.Rows.Add(21, "b");
table.Rows.Add(100, "b");
return table;
}
static void Main(string[] args)
{
DataTable dt =GetTable();
var str = dt.Compute("Sum(Value)", "Name='a' and Value is not null");
}
您无法使用转换调用总和,但您可以尝试以下
DataTable dt =GetTable();
dt.Columns.Add("temp", typeof(int), "Convert(Value, 'System.Int32')");
var str = dt.Compute("Sum(temp)", "Name='a' and Value is not null");
答案 2 :(得分:0)
试
dttest.Compute("Sum(Convert([Value], 'System.Int32'))","[Value] IS NOT NULL");
答案 3 :(得分:0)
当程序尝试将一个声明为字符串的数据表列相加时会发生此错误 使用以下代码对字符串列进行计算操作。
dtTable.Compute("Sum(Convert(" + col_Name + ", 'System.Int32')","");