将 LambaExpression 添加到 IQueryable 的实例
ParameterExpression parameter = Expression.Parameter(typeof(Product), "x");
MemberExpression Left = Expression.MakeMemberAccess(parameter, typeof(Product).GetProperty("Name"));
ConstantExpression Right = Expression.Constant(value, typeof(String));
BinaryExpression expression = Expression.Equal(Left, Right);
LambdaExpression lambada = Expression.Lambda<Func<Product, bool>>(expression, parameter);
现在,如何将这个 lambda 添加到 IQuerybale 的实例中,比如说 _query
_query.Where(lambada.Compile());?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为你只需要更改 lambda 的类型
现在它是一个 Expression> 和
IQueryable.Where
以此作为论点。Expression.Lambda
返回一个TDelegate
,它也是一个LambdaExpression
,这就是Expression.Lambda
行编译的原因在你的情况和我的情况下,但IQueryable.Where
希望将其视为Expression>
。像这样的东西:
I think you just need to change the type of
lambda
Now it is an
Expression<Func<Product, bool>>
andIQueryable.Where
takes that as an argument.Expression.Lambda<TDelegate>
returns aTDelegate
that is also aLambdaExpression
which is whyExpression.Lambda
line compiles in your case and in my case, butIQueryable.Where
wants to see it as anExpression<Func<Product, bool>>
.Something like:
不要使用
.Compile
,它会将表达式转换为委托。IQueryable
使用表达式而不是委托进行过滤:Don't use
.Compile
, it would transform the expression into a delegate. AnIQueryable
is filtered using an expression, not a delegate :