c# - 有没有一种简单的方法来附加 lambda 并重用 lambda 名称以创建我的 Linq where 条件?

标签 c# .net linq linq-to-sql lambda

我有一个用户控件,它接受一个 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/

相关文章:

C# IronPDF 将纯文本发送到 PDF

c# - 来自 MemoryStream 的 UWP BitmapImage SetSource 挂起

c# - RavenDB Multi Map reduce 遇到问题

c# - 页面生命周期 - 使用 FindControl 引用在页面加载期间以编程方式创建的控件

c# - 如何使用 linq toEntity 在单个查询中获取两个列值

c# - 与 Linq-to-Entities 一起使用的可重用函数

c# - 使用 LINQ 转换投影列表返回空值列表?

c# - 使用 NEST 检查索引中是否存在文档

.NET 2.0/VS2005 - BringToFront() 根本不起作用

c# - 通过 C# 更改 Windows Mobile 5 主题