0

私はこのコードを持っています:

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"

この述語をEntityFrameworkで使用しても問題はありませんが、NHiernateでは機能しません。問題は「真」だと思います。この「真」なしでこの述語を作成することは可能ですか?

4

1 に答える 1

1

交換

Expression body = Expression.Constant(true);
foreach (var expression in listExpression)
    body = Expression.And(body, expression);

var body = listExpression.First();//check first if listExpression.Any() would be better
listExpression.Skip(1).Aggregate(body, Expression.And);
于 2012-09-04T18:43:37.343 に答える