Grouping Conditional Clauses

Posts   
 
    
rihadd
User
Posts: 22
Joined: 19-Sep-2007
# Posted on: 06-Jun-2009 02:40:03   

Self Servicing, verson 2.6

Is it possible to group conditional claues using PredicateExpressions? Let's say I have the following sql statement SELET FROM WHERE ((Table1.Foo = @param1 OR Table1.Bar = @param2) AND (Table2.Foo = @param3 AND Table2.Bar = @param4))

How could I write the above query using PredicateExpressions? I tired something like this by it fails to group the conditional claues.

PredicateExpression filter = new PredicateExpression(); filter.Add(new FieldCompareValuePredicate(Talbe1.Foo, ComparisonOperator.Equal, somevalue)); filter.AddWithOr(new FieldCompareValuePredicate(Talbe1.Bar, ComparisonOperator.Equal, somevalue)); filter.AddWitnAnd(new FieldCompareValuePredicate(Talbe2.Foo, ComparisonOperator.Equal, somevalue)); filter.AddWitnAnd(new FieldCompareValuePredicate(Talbe2.Bar, ComparisonOperator.Equal, somevalue));

Rich

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 06-Jun-2009 08:05:12   

Hi Rich,

You could do that this way:

// the OR part
PredicateExpression firstFilter = new PredicateExpression();
firstFilter.Add(new FieldCompareValuePredicate(Talbe1.Foo, ComparisonOperator.Equal, somevalue));
firstFilter.AddWithOr(new FieldCompareValuePredicate(Talbe1.Bar, ComparisonOperator.Equal, somevalue));

// the AND part
PredicateExpression secondFilter = new PredicateExpression();
secondFilter.AddWitnAnd(new FieldCompareValuePredicate(Talbe2.Foo, ComparisonOperator.Equal, somevalue));
secondFilter.AddWitnAnd(new FieldCompareValuePredicate(Talbe2.Bar, ComparisonOperator.Equal, somevalue));

// two parts together. The Add(...) method performs the Add with AND by default.
PredicateExpression filter = new PredicateExpression();
filter.Add(firstFilter);
filter.Add(secondFilter);

Or better:

// the OR part
PredicateExpression firstFilter = new PredicateExpression(Table1Fields.Foo == someValue | Talbe1Fields.Bar == somevalue);

// the AND part
PredicateExpression secondFilter = new PredicateExpression(Talbe2Fields.Foo == somevalue & Talbe2Fields.Bar == somevalue);

// two parts together. The Add(...) method performs the Add with AND by default.
PredicateExpression filter = new PredicateExpression();
filter.Add(firstFilter);
filter.Add(secondFilter);

Or better (the easiest way):

PredicateExpression filter = (Table1Fields.Foo == someValue | Talbe1Fields.Bar == somevalue) & (Talbe2Fields.Foo == somevalue & Talbe2Fields.Bar == somevalue));

Read more info about the predicate system....

David Elizondo | LLBLGen Support Team
rihadd
User
Posts: 22
Joined: 19-Sep-2007
# Posted on: 06-Jun-2009 19:05:31   

That did it. Thanks daelmo.