gpt4 book ai didi

c# - 加入 lambda 表达式

转载 作者:太空狗 更新时间:2023-10-29 19:42:00 29 4
gpt4 key购买 nike

我将如何连接两个像 theese 这样的 lambda 表达式:

Expression<Func<string, bool>> expr1 = a => a.Length > 100;
Expression<Func<string, bool>> expr2 = b => b.Length < 200;

...变成这样的表达式:

Expression<Func<string, bool>> expr3 = s => s.Length < 100 && s.Length < 200;

也就是说,用 AndAlso 运算符连接它们。 (或与此相关的任何其他运营商......)

我实际上成功地对 lambda 参数进行了一些讨厌的递归替换,然后使用 Expression.AndAlso 方法加入。但我正在寻找更简单的东西。

例如像这样的东西:(这显然是行不通的。)

Expression<Func<string, bool>> expr3 = c => expr1(a) && expr2(b);

最佳答案

如果您与普通代表​​打交道,您的“类似”会起作用。但是如果你必须使用表达式树,我看不到除了递归替换之外的任何其他解决方案。

在 .NET 4 中,您可以使用 System.Linq.Expressions.ExpressionVisitor 使这种递归替换变得更加容易。对于 .NET 3.5,请查看此示例:http://msdn.microsoft.com/en-us/library/bb882521.aspx

使用 ExpressionVisitor,您只需重写要替换的节点类型的方法,周围的树就会自动重建。

如果您正在处理使用 LINQ 的条件,动态组合条件的更简单的解决方案是多次调用 Where()。

关于c# - 加入 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358177/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com