2014-09-17 1 views
0

Вот мой кодLinq сильно набраны DataTable и Null вопрос на сегодняшний день колонке

Dim dr2 As PBRuleData.PBRuleRow 
         Dim query As IEnumerable(Of PBRuleData.PBRuleRow) = From s In Me.PBRule.PBRule.AsEnumerable() _ 
                      Where s.PBRuleId = .PBRuleId And s.StartDate <= .PBDate _ 
                      And (s.IsFinishDateNull Or (s.FinishDate > .PBDate)) Select s 

         If query.Count > 0 Then 
          dr2 = query.ElementAt(0) 
          If Not (dr2.IsHoursNull) Then 
           If dr2.IsBilling Then 
            dblHoursBILL += CType(dr2.Hours, Double) 
           Else 
            dblHoursPAY += CType(dr2.Hours, Double) 
           End If 
          End If 
         End If 

Даже если я поставил условие s.IsFinishDateNull, чтобы избежать исключения нулевого, но его до сих пор вызывает исключение The value for column 'FinishDate' in table 'PBRule' is DBNull. этот запрос LINQ является чередуйтесь с этим datatable запросом, который отлично работает.

Dim dr As DataRow() 
         Dim sQuery As String 
         sQuery = "PBRuleId={0} AND StartDate<=#{1:MM/dd/yy}# AND (FinishDate>=#{1:MM/dd/yy}# OR FinishDate IS NULL)" 
         dr = Me.PBRule.PBRule.Select(String.Format(sQuery, .PBRuleId, .PBDate)) 

         If dr.Length > 0 Then 
          If Not (dr(0).Item("Hours") Is DBNull.Value) Then 
           If dr(0).Item("IsBilling").ToString().ToLower = "true" Then 
            dblHoursBILL += CType(dr(0).Item("Hours").ToString(), Double) 
           Else 
            dblHoursPAY += CType(dr(0).Item("Hours").ToString(), Double) 
           End If 
          End If 
         End If 

Может кто-нибудь помочь

ответ

0

Использование OrElse вместо Or.

Оператор Or оценивает обе стороны выражений независимо от результата левой стороны.

+0

Спасибо, что сработали. может также помочь мне преобразовать этот sql в linq select * из tblPBRule, где PBRuleId = 364 и StartDate <= '20140902', а finaldate - null и PBCodeid в (выберите PBCodeid из tblpbrule, где PBHourstypeid IN (3,4,5,6)) или я задаю еще один вопрос, поэтому – 3355307

+0

Добро пожаловать. Если вы боретесь с предложением 'IN', см. [Linq-версия SQL-запроса« IN »] (http://stackoverflow.com/questions/896123/linq-version-of-sql-in-statement/896156#896156) , Или лучше создать новый вопрос. – Ripple

Смежные вопросы