不能在 linq 表达式中将对象从 DBNull 强制转换为其他类型的对象
本文关键字:对象 转换 其他 类型 linq 表达式 不能 DBNull | 更新日期: 2023-09-27 18:36:33
var gFieldList = new List<string>() { "Supplier", "Country" };
var sFieldList = new List<string>() { "Sales"};
var gField = string.Join(", ", gFieldList.Select(x => "it['"" + x + "'"] as " + x));
var sField = string.Join(", ", sFieldList.Select(y => "Sum(Convert.ToDouble(it['""+y+"'"])) as "+y));
var newSort = dataTable
.AsEnumerable()
.AsQueryable()
.GroupBy("new("+gField+")", "it")
.Select("new("+sField+",it.Key as Key, it as Data)");
var groupedData = (from dynamic dat in newSort select dat).ToList();
抛出异常
对象不能从 DBNull 强制转换为其他类型。
在最后一行,
var groupedData = (from dynamic dat in newSort select dat).ToList();
如何解决这个问题?
编辑2:尝试像这样更改转换
sFieldList.Select(y => "Sum(Convert.ToDouble(iif(it['""+y+"'"] == @0,0,it['""+y+"'"]))) as "+y)
然后
var newSort = dataTable
.AsEnumerable()
.AsQueryable()
.GroupBy("new("+gField+")", "it")
.Select("new("+sField+",it.Key as Key, it as Data)",DBNull.Value);
UPDATE2:对于四舍五入的结果,请尝试以下操作:
sFieldList.Select(y => "Sum(Math.Round(Convert.ToDouble(iif(it['""+y+"'"] == @0,0,it['""+y+"'"])),2)) as "+y)
试试这个:
var gFieldList = new List<string ?>() { "Supplier", "Country" };
var sFieldList = new List<string ?>() { "Sales"};