Expression.Lambda 不绑定 IEnumerable<ParameterExpressions>
Expression.Lambda does not bind IEnumerable<ParameterExpressions>
我有一个像这样的表达式>:
Expression<Func<T,bool>> filterExp = input => input.Deleted == false;
然后,我有一个计算另一个 Expression> 的逻辑:
Expression<Func<T,bool>> standardExp = input => 1 == 1;
if (onlyStandard) {
standardExp = input =>input.Standard == true;
}
我知道在这个例子中,我可以把这个逻辑放在 filterExp 表达式中,但是在我的代码中,standardExp 是由一个以类型 T 为键的字典获取的,所以我不能把逻辑放在 filterExp 或 LinqToSQL 无法将其翻译成 SQL 表达式。
我想做的是以这种方式合并这些表达式:
BinaryExpression exp = Expression.AndAlso(filterExp.Body, standardExp.Body);
然后,我使用以下语句创建 ParameterExpression:
var p = Expression.Parameter(typeof(T),"input");
我用这个创建 Lambda:
var lmb = Expression.Lambda<Func<T, bool>>(exp,new ParameterExpression[] { p });
但是,当我尝试这样做时:
var result = db.Entities.Where(lmb);
我有一个异常告诉我输入参数没有绑定。
“参数 'input' 未绑定到指定的 LINQ to Entities 查询表达式中。”
当然,在一般情况下,T 是用“实体”类型解析的。
我是表达式树的新手,我还没有找到任何关于参数绑定的文档。我究竟做错了什么?请再次注意,最终的 lambda 应该与 Entity Framework 一起使用,并且应该可以转换为 SQL。谢谢。
在此处找到回复:
Combining two expressions (Expression<Func<T, bool>>)
基本上,我在这里做错了:
BinaryExpression exp = Expression.AndAlso(filterExp.Body, standardExp.Body);
因为我必须调用那些表达式...但调用方法不是 EF-Save,除非您为 EF Compliance 执行 ExpressionVisitor,就像上面 link 中所示。
我有一个像这样的表达式
Expression<Func<T,bool>> filterExp = input => input.Deleted == false;
然后,我有一个计算另一个 Expression
Expression<Func<T,bool>> standardExp = input => 1 == 1;
if (onlyStandard) {
standardExp = input =>input.Standard == true;
}
我知道在这个例子中,我可以把这个逻辑放在 filterExp 表达式中,但是在我的代码中,standardExp 是由一个以类型 T 为键的字典获取的,所以我不能把逻辑放在 filterExp 或 LinqToSQL 无法将其翻译成 SQL 表达式。 我想做的是以这种方式合并这些表达式:
BinaryExpression exp = Expression.AndAlso(filterExp.Body, standardExp.Body);
然后,我使用以下语句创建 ParameterExpression:
var p = Expression.Parameter(typeof(T),"input");
我用这个创建 Lambda:
var lmb = Expression.Lambda<Func<T, bool>>(exp,new ParameterExpression[] { p });
但是,当我尝试这样做时:
var result = db.Entities.Where(lmb);
我有一个异常告诉我输入参数没有绑定。 “参数 'input' 未绑定到指定的 LINQ to Entities 查询表达式中。” 当然,在一般情况下,T 是用“实体”类型解析的。 我是表达式树的新手,我还没有找到任何关于参数绑定的文档。我究竟做错了什么?请再次注意,最终的 lambda 应该与 Entity Framework 一起使用,并且应该可以转换为 SQL。谢谢。
在此处找到回复:
Combining two expressions (Expression<Func<T, bool>>)
基本上,我在这里做错了:
BinaryExpression exp = Expression.AndAlso(filterExp.Body, standardExp.Body);
因为我必须调用那些表达式...但调用方法不是 EF-Save,除非您为 EF Compliance 执行 ExpressionVisitor,就像上面 link 中所示。