Sometimes you need to run through all conditions in your query to perform some operation for each condition or to find a particular one. Here is a code snippet which demonstrates this operation:
private void ScanConditionGroup(Predicate predicate, Action<SimpleCondition> condAction)
{
foreach (Condition cond in predicate.Conditions) {
if (cond is SimpleCondition) {
condAction?.Invoke(cond as SimpleCondition);
}
else if (cond is Predicate) {
ScanConditionGroup((Predicate)cond, condAction);
}
}
}
//to start the process just call this function for the Root condition in your query and pass the action which performs some operations over one condition:
ScanConditionGroup(query1.Root, scond => {
var attrExpr = (EntityAttrExpr)scond.BaseExpr;
//here is the attribute of this condition
var attr = attrExpr.Attribute;
//here is condition operator
var op = scond.Operator;
//now we run through all expressions in this condition (except the first one) and check their values
foreach (var expr in scond.Expressions) {
string value = expr.Value;
string text = expr.Text;
}
});