none
表达式树建立动态查询 RRS feed

  • 问题

  • 最近要尝试一下表达式树动态查询,但在此过程中遇到一个问题。

    需求如下:

    1、对Queryable写一个表达式树,对它进行Where操作,Where操作内部会判断Queryable中的项的“Z”属性值是否为1,选出符合条件的项;

    2、因为希望传输到服务器运行,因此不适合有过于复杂的操作;

    3、编写时不知道Queryable中是什么类型的数据,运行时才知道。

    我的尝试:

                var queryable = data.AsQueryable();
                {
                    var parameterExpression = Expression.Parameter(typeof(object), "location");
                    var menberExpression =
                        Expression.Property(Expression.Convert(parameterExpression, queryable.ElementType), "Z");
                    var condition1 = Expression.Equal(menberExpression, Expression.Constant(1));
                    var lambda = Expression.Lambda<Func<object, bool>>(condition1, parameterExpression);
                    var whereExpression = Expression.Call(
                        typeof(Queryable),
                        "Where",
                        new[] {queryable.ElementType},
                        queryable.Expression,
                        lambda);
                    var result = queryable.Provider.CreateQuery<object>(whereExpression);
                    Data = new ObservableCollection<object>(result);
                }
    

    data是查询过来的原始queryable,Data完成查询后数据的去向。

    这段代码是仿照MSDN中的,但是由于有一个未知类型,因此有很大的区别。也是代码不能运行的原因之一。

    请问有谁能指出我的用法上的错误?或者有什么其他思路?

    2016年9月23日 7:29

全部回复