我有一个用户控件,它接受一个 Func,然后将其提供给 IQueryable 的 Linq“Where”扩展方法。我的想法是,从调用代码中,我可以传入所需的搜索函数。
我想这样动态地构建这个搜索功能:
Func<Order, bool> func == a => true;
if (txtName.Text.Length > 0) {
//add it to the function
func = a => func(a) && a.Name.StartsWith(txtName.Text);
}
if (txtType.Text.Length > 0) {
//add it to the function
func = a => func(a) && a.Type == txtType.Text;
}
..... etc .....
这种方法的问题在于,因为我重复使用了名称“func”,所以它创建了一个递归函数。
是否有一种简单的方法来构建这样的表达式树以创建动态 where 子句(在没有预先设置 IQueryable 并重复调用“Where”的情况下)?
最佳答案
只需将当前的 lambda 保存在一个临时变量中以防止递归。
var tempFunc = func;
func = a => tempFunc(a) && ...
关于c# - 有没有一种简单的方法来附加 lambda 并重用 lambda 名称以创建我的 Linq where 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853990/