AddWithOr help

Posts   
 
    
bclark00
User
Posts: 5
Joined: 30-May-2008
# Posted on: 12-Jun-2008 19:22:39   
Public Function GetSTATOrderCollection(ByVal OrderStatus As String) As OrderCollection
    Dim STATOrders As New OrderCollection
    Dim Filter As IPredicateExpression = New PredicateExpression
    Filter.Add(HelperClasses.OrderFields.Type = "STAT")
    'Filter.AddWithOr(HelperClasses.OrderFields.Type = "NRD")
    Filter.Add(HelperClasses.OrderFields.Status = OrderStatus)
    If OrderStatus = SO_Accessioned Then
        Filter.Add(HelperClasses.OrderFields.CollectionDateTime > DateAdd(DateInterval.Day, -7, Now))
    End If
    STATOrders.GetMulti(Filter, 0)
    Return STATOrders
End Function

The commented line is causing issues. When uncommented it returns all record from the order table, but the desired result should be WHERE Order.Type = "STAT" OR Order.Type = "NRD"

I'm sure there is something simple I'm doing wrong...

arschr
User
Posts: 893
Joined: 14-Dec-2003
# Posted on: 12-Jun-2008 19:58:18   

I think you need to inject another predicate expression like this:

Public Function GetSTATOrderCollection(ByVal OrderStatus As String) As OrderCollection Dim STATOrders As New OrderCollection Dim Filter As IPredicateExpression = New PredicateExpression Dim SubFilter as IPredicateExpression = New PredicateExpression SubFilter.Add(HelperClasses.OrderFields.Type = "STAT") SubFilter.AddWithOr(HelperClasses.OrderFields.Type = "NRD") Filter.AddWithAnd(SubFilter) Filter.Add(HelperClasses.OrderFields.Status = OrderStatus) If OrderStatus = SO_Accessioned Then Filter.Add(HelperClasses.OrderFields.CollectionDateTime > DateAdd(DateInterval.Day, -7, Now)) End If STATOrders.GetMulti(Filter, 0) Return STATOrders End Function

Excuse my vb if this doesn't compile, but the idea is to make a seperate or predicate in order to group Stat or Nrd, the and that with your other clauses.

Hope this helps.

bclark00
User
Posts: 5
Joined: 30-May-2008
# Posted on: 12-Jun-2008 20:40:40   

Thanks--Works great!