无法将对象从DBNull强制转换为linq表达式中的其他类型

时间:2013-10-23 04:56:47

标签: c# linq object casting dbnull

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 个答案:

答案 0 :(得分:0)

EDIT2:尝试更改您的转换

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)

答案 1 :(得分:0)

试试这个:

var gFieldList = new List<string ?>() { "Supplier", "Country" };
var sFieldList = new List<string ?>() { "Sales"};