2013-10-23 29 views
0
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轉換到其它類型的在LINQ表達

對象不能從DBNull轉換爲其他類型。

在最後一行

var groupedData = (from dynamic dat in newSort select dat).ToList(); 

如何解決這個問題?

+1

是什麼newSort? – Jon

+0

newSort是var類型,其中我從動態Linq表達式獲取值。 –

+0

你可以分享'var newSort ='行嗎? –

回答

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) 
+0

感謝格蘭迪,我已經在問題中添加了newSort ..無論如何,我會試試這個.. –

+0

他們都沒有似乎工作,他們都拋出相同的例外..! –

+0

這個也沒有運氣:( –

0

試試這個:

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

類型「字符串」必須是一個非空的值類型,以將其用作參數「T」的泛型類型或方法「System.Nullable 」 –

+0

你應該放在哪裏狀況檢查空。 – kaushik0033

相關問題