如何检查每列上的DataRow.isdbnull并将其替换为值

时间:2014-10-18 20:23:49

标签: vb.net

我将数据从Excel导入数据表,我必须通过每一列进行一些计算。我的列是Double,date和string类型。我有时会得到Null引用异常,因为某些列可能缺少数据。如果是double,我怎样才能自动将dbnull替换为0,而对于日期,如何自动将dbnull替换为00/00/00。这是我的代码的一部分

 Dim dict As Dictionary(Of String, List(Of DataRow)) = dt.AsEnumerable() _
        .GroupBy(Function(x) x.Field(Of String)("USER_picking"), Function(y) y) _
        .ToDictionary(Function(x) x.Key, Function(y) y.ToList())




        datasource.Columns.Add("Date", GetType(String))
        datasource.Columns.Add("USERID", GetType(String))
        datasource.Columns.Add("Number_Ords", GetType(Integer))
        datasource.Columns.Add("Total_Pkg", GetType(Double))
        datasource.Columns.Add("Orders", GetType(Double))
        datasource.Columns.Add("Packages", GetType(Double))
        datasource.Columns.Add("Orders1", GetType(Int32))
        datasource.Columns.Add("Packages1", GetType(Double))
        datasource.Columns.Add("Orders2", GetType(Int32))
        datasource.Columns.Add("Packages2", GetType(Double))
        datasource.Columns.Add("Orders3", GetType(Int32))
        datasource.Columns.Add("Packages3", GetType(Double))
        datasource.Columns.Add("Orders4", GetType(Int32))
        datasource.Columns.Add("Packages4", GetType(Double))
        datasource.Columns.Add("Orders5", GetType(Int32))
        datasource.Columns.Add("Packages5", GetType(Double))
        datasource.Columns.Add("Orders6", GetType(Int32))
        datasource.Columns.Add("Packages6", GetType(Double))


        For Each id As String In dict.Keys

            Dim OrderList As New List(Of Double)
            Dim rows As List(Of DataRow) = dict(id)
            For Each row As DataRow In rows

                Dim current As Double = (row("packages"))
                OrderList.Add(current)

                'Timelist.Add(currenttime)
            Next row

            Dim currenttime = From row In rows   '''' expcetion here
                                 Let time = row.Field(Of Date)("paid")
                                 Where (time.TimeOfDay >= New TimeSpan(8, 0, 0) AndAlso time.TimeOfDay <= New TimeSpan(10, 0, 0))
                                 Select paid = row.Item("paid"), packages = row.Item("packages") Distinct

            Dim plist As New List(Of Date)
            For Each p In currenttime
                plist.Add(p.paid)
            Next
            Dim palist As New List(Of Double)
            For Each pa In currenttime
                palist.Add(pa.packages)
            Next

0 个答案:

没有答案