【发布时间】:2021-03-25 23:45:25
【问题描述】:
我有一个这样的表达式
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 应该与实体框架一起使用,并且应该可以转换为 SQL。谢谢。
【问题讨论】:
标签: c# lambda expression