c# - LINQ 列表 : Specified cast is not valid

标签 c# .net linq

我正在尝试计算符合我的条件的列的总和。列表(lstSumQty)中“数量”列的记录采用字符串格式(注意:由于此数据来自最终用户上传的 excel 文件。因此,数量列有时为字符串或十进制) .

由于column string DataType,系统抛出异常:Specified cast is not valid,How to cast it or resolve?

列表中的数据

 Unit  Quantity
 "t"    "10"
 "t"    "05"
 "kg"   "14"
 "t"    "02"

结果应该是: tUnitTotal = 17

看下面这段代码

 tUnitTotal = lstSumQty
   .AsEnumerable()
   .Where(row => row.Field<string>("Unit") == "t")
   .Sum(row => row.Field<decimal>("Quantity"))
   .ToString();

除了 List,我还可以使用 LINQ 使用 DataSet 或 DataTable。

如有任何帮助,我们将不胜感激:)。

最佳答案

通用类型参数(在您的情况下为 <decimal>)并不表示您希望返回什么,而是表示它在数据库中的。 p>

所以你需要在计算它们的总和之前将你的字符串转换为数字:

tUnitTotal = lstSumQty.AsEnumerable()
    .Where(row => row.Field<string>("Unit") == "t")
    .Sum(row => Convert.ToDecimal(row.Field<string>("Quantity")))
    .ToString();

关于c# - LINQ 列表 : Specified cast is not valid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56472765/

相关文章:

c# - 获取总结果数并允许在与 MongoDB 的同一查询中进行分页

c# - 在 ubuntu 上通过 .net core 发送电子邮件返回 base64 错误

c# - 有没有一种简单的方法可以将命令绑定(bind)到 MVVM WPF 中的列表框?

c# - 枚举作为其自己的自定义属性构造函数的参数

c# - 使用谷歌分析记录请求页面时间

c# - LINQ GroupBy 与 SQLite.EF6 导致 'APPLY joins are not supported' 异常

c# - 发布同一 ClickOnce 应用程序的多个版本的最佳方式是什么?

.net - 记录日志的最佳方法是什么?

c# - 评估日期仅显示天数

sql - 表中的每 N 行 LINQ to SQL