c# - 查询浮点字段时 LAMBDA 表达式中的“指定转换无效”

标签 c# .net linq lambda

我不明白为什么会在此处抛出“Specified cast is not valid exception”:

c#代码:

异常在到达 m.HadapGoalPercent 时抛出属性,我尝试更改 x => x.Field<float>("HadapGoalPercent") 的数据类型也可以单倍和双倍但它不起作用

 for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Sales.Month m = new Sales.Month(Yearnum, (byte)(i+1));
                        m.HadapGoal = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<int>("HadapGoalIncome")).Single();
                        m.ShotefGoal = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<int>("ShotefGoalIncome")).Single();
                        m.HadapGoalPercent = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select( x => x.Field<float>("HadapGoalPercent")).SingleOrDefault();
                        m.ShotefGoalPercent = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<float>("ShotefGoalPercent")).SingleOrDefault();
                        months.Add(m);
                    }

这就是 ShotefGoalPercent 的定义HadapGoalPercent Month 类中的属性:

 public Single ShotefGoalPercent { get; set; }
 public Single HadapGoalPercent { get; set; }

那是 dt 数据表:

(HadapGoalPercent和ShotefGoalPercent在sql数据库中定义为decimal(5,4))

dt Datatable Image

非常感谢您的时间和考虑

最佳答案

根据我的评论,我不确定您为什么不将其转换为小数,因为这就是您在数据库中存储的内容。但是,如果您真的想将其作为 double,您可以尝试:

Convert.ToDouble(value)

根据您传递的小数位数,您应该没问题。对于非常大的小数,您可能会面临失去精度的风险,但正如我所说,我认为这对您来说不是问题。

关于c# - 查询浮点字段时 LAMBDA 表达式中的“指定转换无效”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607233/

相关文章:

c# - 如何为这个业务逻辑代码编写可靠的单元测试?

c# - 在 C# 应用程序中隐藏 MySQL 凭据

c# - LinQ ofType in 值

.net - 从 WebService 调用获取响应 header ?

c# - NHibernate.映射异常 : No persister for: XYZ

c# - 如何使用 LinqToSql 将字符串值隐式转换为枚举?

linq - 如何辨别 Type 是否是静态数组初始值设定项?

.net - 我是否应该始终对函数中返回的 LINQ 查询结果调用 .ToArray?

c# - .net 合成器

c# - 提高 XmlSerializer 的性能