Answered Evaluate object tree expressions

  • Tuesday, July 31, 2007 5:31 PM
     
     

     

    Hi!

     

    I have this:

     

    IList<int> numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

     

    Expression parameter = Expression.Parameter(typeof(int), "x");

     

    BinaryExpression binaryExpression = Expression.Or(

    ConditionalExpression.LessThan(parameter, MemberExpression.Constant(5)),

    ConditionalExpression.GreaterThan(parameter, MemberExpression.Constant(7)));

     

    what should i do next to evalute the expression "binaryExpression" on the list "numbers"?

     

    This binary expression would find in numbers where x < 5 | x > 7...

     

    Best Regards!

     

    Felipe

All Replies

  • Tuesday, July 31, 2007 7:34 PM
     
     Answered
    I think this is what you are trying to achieve:

    Code Snippet

    IEnumerable<int> numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    ParameterExpression parameter = Expression.Parameter(typeof(int), "x");
    Expression<Func<int, bool>> expr = Expression.Lambda<Func<int, bool>>(
      Expression.Or(
        ConditionalExpression.LessThan(parameter, MemberExpression.Constant(5)),
        ConditionalExpression.GreaterThan(parameter, MemberExpression.Constant(7))),
      new ParameterExpression[] { parameter });

    IEnumerable<int> results = numbers.Where(expr.Compile());
    foreach (int i in results)
      Console.WriteLine(i);