我需要使用linq
对数据表执行求和函数 var query = from row in data.AsEnumerable()
group row by row.Field<string>("ID") into grp
select new
{
Id = grp.Key,
sum = grp.Sum(r => r.Field<decimal>("AMOUNT"))
};
问题是字段AMOUNT并不总是十进制,但有时可能是Int64或Int32。因此,当该字段为Int32时,我得到一个异常,即强制转换无效
有没有办法在sum函数中使用动态字段类型?
答案 0 :(得分:1)
在这种情况下,Convert.ToDecimal
非常适用于所有数字类型(IConvertible
):
var query = from row in data.AsEnumerable()
group row by row.Field<string>("ID") into grp
select new
{
Id = grp.Key,
sum = grp.Sum(r => Convert.ToDecimal(r["AMOUNT"])
};