2017-02-14 45 views
0

我在數據表中對數據進行分組,並總結了使用LINQ一列,但同時運行時,我收到錯誤,指出得到錯誤無法施展DBNull.Value鍵入「System.Int32

無法施展DBNull.Value鍵入'System.Int32。請使用可空類型」下面是我的代碼

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
     .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
     .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Double.Parse(r.Item("k001ICGeo").ToString()))}) 

請建議我如何避免走空value.I我在第二行收到錯誤

.GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}).

我不想取空​​值

+0

我相信問題是InstitutionalInvestorStyleID。檢查數據庫中是否可以空。試試'v.Field(Of Integer?)(「InstitutionalInvestorStyleID」)' – shadow

回答

0

DataTables不存儲空值,而是存儲DBNull

因此您的IsNothing沒有幫助。

因此,您需要與DBNull.Value(DBNull的單例)進行比較。

0

嘗試這樣:

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
         .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer?)("InstitutionalInvestorStyleID").GetValueOrDefault, 
                 Key .StyleName = If(String.IsNullOrEmpty(v.Field(Of String)("InstitutionalInvestorStyleName")),"", v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
         .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Convert.ToDouble(r.Item("k001ICGeo"))))}) 
+0

感謝您的幫助。我現在沒有收到任何錯誤,但如果樣式名爲空或「」,我不想採取特定行。如何避免佔用該行。 –

0

錯誤信息是因爲你必須在列,你試圖同時分組投空值,所以乾脆將其更改爲Nullable類型。此外,得到的只有那些沒有空值的記錄申請使用Where子句這樣的過濾器: -

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
    .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer?)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
    .Where(Function(x) x.Key.InvestorStyleID IsNot Nothing) _ 
    .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Double.Parse(r.Item("k001ICGeo").ToString()))}) 

我還增加了一個樣本撥弄展示它是如何工作的一些樣本數據。

Fiddle.

相關問題