具有动态类型的LINQ查询字段<t>

时间:2017-09-01 08:26:52

标签: c# linq

我需要使用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函数中使用动态字段类型?

1 个答案:

答案 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"])
             };