in

Paul Rausch

CRM QueryExpression Grouping Conditions

I had a scenario the other day where I need to use the CRM SDK to do a query simlar to this 'WHERE column1 = value AND (column2=value1 OR column2=value2)' , this was pretty easy to accomplish once I understood difference between Filters and Conditions on the QueryExpression object.  Here is how the previous query maps out to Conditions and Filters.

column1 = value  //is a condition
(column2=value1 OR column2=value2) //is a filter

So basically the way to build it is to create a condition expression for  (column2=value1 OR column2=value2) and add that as a filter expression to the top level expression.  The following code demonstrates.

        Dim column1Condition As New CRMService.ConditionExpression
        column1Condition.AttributeName = "column1"
        column1Condition.Operator = CRMService.ConditionOperator.Equal
        column1Condition.Values = New Object() {value}

        Dim column2Value1Condition As New CRMService.ConditionExpression
        column2Value1Condition.AttributeName = "column2"
        column2Value1Condition.Operator = CRMService.ConditionOperator.Equal
        column2Value1Condition.Values = New Object() {value1}

        Dim column2Value2Condition As New CRMService.ConditionExpression
        column2Value2Condition.AttributeName = "column2"
        column2Value2Condition.Operator = CRMService.ConditionOperator.Equal
        column2Value2Condition.Values = New Object() {value2}       

        Dim qe As New CRMService.QueryExpression

        Dim secondLevelFilter As CRMService.FilterExpression = New CRMService.FilterExpression
        secondLevelFilter.FilterOperator = CRMService.LogicalOperator.Or
        secondLevelFilter.Conditions = New CRMService.ConditionExpression {column2Value1Condition, column2Value2Condition}

        Dim topLevelFilter As CRMService.FilterExpression = New CRMService.FilterExpression
        topLevelFilter.FilterOperator = CRMService.LogicalOperator.And
        topLevelFilter.Conditions = New CRMService.ConditionExpression {column1Condition}
        topLevelFilter.Filters = New CRMService.FilterExpression {secondLevelFilter}

        qe.Criteria = topLevelFilter

Only published comments... May 06 2008, 12:37 PM by prausch

Leave a Comment

(required)  
(optional)
(required)  
Add
Inetium, LLC. Disclaimer