我如何加入像theese这样的两个lambda表达式:
Expression<Func<string, bool>> expr1 = a => a.Length > 100;
Expression<Func<string, bool>> expr2 = b => b.Length < 200;
Run Code Online (Sandbox Code Playgroud)
......变成这样的表达式:
Expression<Func<string, bool>> expr3 = s => s.Length < 100 && s.Length < 200;
Run Code Online (Sandbox Code Playgroud)
也就是说,将它们与AndAlso运算符连接起来.(或者任何其他运营商......)
我实际上成功地进行了一些讨厌的递归替换lambda参数,然后加入Expression.AndAlso方法.但我正在寻找更简单的东西.
例如:(显然不起作用.)
Expression<Func<string, bool>> expr3 = c => expr1(a) && expr2(b);
Run Code Online (Sandbox Code Playgroud)
如果您正在与普通代表打交道,那么您的“类似的东西”就会起作用。但如果你必须使用表达式树,除了递归替换之外,我看不到任何其他解决方案。
在 .NET 4 中,您可以使用 System.Linq.Expressions.ExpressionVisitor 使这种递归替换变得更加容易。对于 .NET 3.5,请查看以下示例:http://msdn.microsoft.com/en-us/library/bb882521.aspx
使用ExpressionVisitor,您只需重写要替换的节点类型的方法,周围的树就会自动重建。
如果您正在处理使用 LINQ 的条件,动态组合条件的一个更简单的解决方案是多次调用Where()。
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |