C#重构lambda表达式

Tot*_*oto 7 c# lambda expression-trees

我有几个Expression<Func<User,bool>>共享属性的表达式.例如,

Expression<Func<User, bool>> e1 = 
  (User u) => u.IsActive && u.Group != "PROCESS" && u.Name != null;
Expression<Func<User, bool>> e2 = 
  (User u) => u.IsActive && u.Group != "PROCESS" && u.Name != "A";
Expression<Func<User, bool>> e3 = 
  (User u) => u.IsActive && u.Group != "PROCESS" && u.Name != "B";
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以将u.IsActive && u.Group != "PROCESS"变量放入e1,e2和e3中?编辑:我仍然想要同一棵树.

似乎我可以通过使用Expression.Lambda<Func<User, bool>>(BinaryExpression.AndAlso(etc 构建表达式来实现它...但是它不是简化我的代码而是使它更难以阅读.

Meh*_*ari 3

我相信没有更干净的方法可以为您的案例做到这一点。你可以像你提到的那样使用BinaryExpression。您可以将BinaryExpressionand调用Expression.Lambda封装到一个方法中并调用该方法(如PredicateBuilder.And),但这些都不像当前的语法(IMO)那么干净。