【发布时间】:2018-04-19 11:57:10
【问题描述】:
老程序员编码的原始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(",",""))
来自这些Currency、Convert、SUM LINQ 论坛,但错误仍然存在。
问题是我在这里做错了什么?为什么我的前两个代码有效,但没有?最后,为什么会出现 'Input string was not in a correct format' 错误?
提前致谢。
更新
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();
【问题讨论】:
-
金额的类型是什么
-
你能在这里复制你的整个 linq 查询吗 - g 代表什么?而且,可以尝试 double.Parse() 或 decimal.Parse()
-
amount的其中一个值不是Convert.ToDouble()解析的有效格式。到目前为止,您给出的示例都很好。检查其余数据。我确实担心amount在原始查询中被转换为money。为什么它不被存储为money? -
@TheGeneral 数据类型是字符串
-
@Yatin 更新了我的帖子。包括我的整个 Linq 代码
标签: c# linq sql-to-linq-conversion