【发布时间】:2012-09-04 18:26:05
【问题描述】:
我有这个代码:
var listExpression = new List<Expression>();
var parameter = Expression.Parameter(typeof(T));
var memberExpression = Expression.PropertyOrField(parameter, MyProperty);
listExpression.Add(
Expression.Call(
((MemberExpression)memberExpression), "Contains", null,
Expression.Constant((string)MyValue))
);
Expression body = Expression.Constant(true);
foreach (var expression in listExpression)
body = Expression.And(body, expression);
return Expression.Lambda<Func<T, bool>>(body, parameter);
这样的结果是:
"True & $var1.AGE >= 5"
当我将此谓词与实体框架一起使用但不适用于 NHiernate 时,我没有任何问题。我认为问题是“真”。没有这个“真”是否可以创建这个谓词?
【问题讨论】:
-
不完全是一个直接的答案,但是:您可以尝试用基于LINQKit 的等效代码替换此代码,看看是否可以解决问题? (作为奖励,您将获得大量的可读性。)
-
更新了代码,忘了一行。
-
@Kris-I: 你把
True放在表达式中是为了什么? -
@Dennis 为什么你的意思是?我不想有这个真实的
-
@Kris-I:请发布您想用表达式构建的 LINQ 示例。
标签: c# .net entity-framework nhibernate predicate