LINQ列出:指定的演员表无效

时间:2019-06-06 07:27:35

标签: c# .net linq

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

由于列字符串DataType,系统引发异常:指定的转换无效,如何转换或解决?

列表中的数据

 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();

我也可以使用LINQ使用DataSet或DataTable,而不是使用List。

任何帮助将不胜感激:)。

1 个答案:

答案 0 :(得分:7)

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

因此,您需要先将字符串转换为数字,然后再计算其总和:

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