我不明白为什么会在此处抛出“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))
非常感谢您的时间和考虑
最佳答案
根据我的评论,我不确定您为什么不将其转换为小数,因为这就是您在数据库中存储的内容。但是,如果您真的想将其作为 double,您可以尝试:
Convert.ToDouble(value)
根据您传递的小数位数,您应该没问题。对于非常大的小数,您可能会面临失去精度的风险,但正如我所说,我认为这对您来说不是问题。
关于c# - 查询浮点字段时 LAMBDA 表达式中的“指定转换无效”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607233/