我需要实现一个在2个表达式树上生成的方法。像这样:
public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1,
Expression<Func<TEntity, bool>> ex2)
{
return Expression.And(ex1, ex2);
}
在这种情况下,返回类型不是我需要的Expression<Func<TEntity, bool>>
怎么做我需要的?
提前谢谢!
答案 0 :(得分:2)
非最佳解决方案(未经测试):
public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1,
Expression<Func<TEntity, bool>> ex2)
{
var x = Expression.Parameter(typeof(TEntity));
return Expression.Lambda<Func<TEntity,bool>>(
Expression.And(
Expression.Invoke(ex1, x),
Expression.Invoke(ex2, x)), x);
}
答案 1 :(得分:1)
public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1,
Expression<Func<TEntity, bool>> ex2)
{
var parameter = Expression.Parameter(typeof(TEntity));
return Expression.Lambda<Func<TEntity, bool>>(
Expression.And(
Expression.Invoke(ex1, parameter),
Expression.Invoke(ex2, parameter)),
parameter);
}
请注意,除非您压缩Invokes,否则这不适用于Entity Framework。用于实施的Google InvocationExpander。