Linq 输入字符串在 MVC 中的格式不正确



由老程序员编写的原始SQL命令看起来像这样

SELECT ooe_general_id, SUM(CAST(CAST(amount AS money) AS float)) AS totalAppro, MAX(date) AS lastDate 
FROM  dbo.pmTA_OoeGeneralAppropriation

数据类型:字符串

Database Values
----------------
3,200,000.00
2916410
28,710,000.00
0.80000000000291
-1000000

当我尝试将上述代码转换为 Linq 时,此行中显示错误"输入字符串格式不正确">

totalAppro = g.Sum(p => Convert.ToDouble(p.amount))

我尝试将代码更改为

Convert.Double(string, IFormatprovider)  
Convert.ToDouble(String.Format("{0:c}", p.amount)) 
Convert.ToDecimal(p.amount.Replace(",",""))

从这些货币、转换、SUM LINQ 论坛,但错误仍然存在。

问题是我在这里做错了什么?为什么我的前两个代码有效,但这不起作用?最后,为什么会出现"输入字符串格式不正确">错误?

提前谢谢。

更新

var totalAppropriationGeneralFund = (from p in db.iBudget_OoeGeneralAppropriation   
where !p.amount.StartsWith("-")
group p by p.ooe_general_id into g    
select g).AsEnumerable().Select(g => new {
id = g.Key,
totalAppro = g.Sum(p => Convert.ToDecimal(p.amount.Replace(",",""))),
date = g.Max(p => p.date)
}).ToList();

首先

不要存储数据类型或将数据类型转换为字符串,然后再返回。 将它们保留为原样,仅出于显示目的转换它们,并且绝对不要将数字类型作为字符串存储在数据库中(只是一个提示)。

其次

如果您有点担心准确性,请不要使用浮点值,如doublefloat。他们因失去精度和添加人工制品而臭名昭著,使用decimal

第三

  • Double.Parse Method (String, NumberStyles, IFormatProvider)

  • 数字样式枚举

数字样式枚举:确定数值字符串参数中允许的样式 传递给 Parse 和 TryParse 方法的 积分和 浮点数值类型。

以上是你的问题

工作示例

var list = new List<string>
{
"3,200,000.00",
"2916410",
"28,710,000.00",
"0.80000000000291",
"-1000000"
};
var sum = list.Sum(x => decimal.Parse(x, NumberStyles.Any, CultureInfo.InvariantCulture));

输出

33826410.80000000000291

完整演示在这里

延伸阅读

十进制(C# 参考)

更新

正如Bagus Tesa的评论中所述,您不能在 EF 或Linq to sql中使用parse方法,这必须在内存中完成,我会考虑在铺设数据类型和/或查询下更改您

相关内容

  • 没有找到相关文章

最新更新