使用动态比较运算符生成lambda表达式(谓词)

本文关键字:表达式 lambda 谓词 动态 比较 运算符 | 更新日期: 2023-09-27 18:29:26

以Northwind为例。

我的目标是使用Linq-to-Entity来动态搜索Employees。

我的表达可能是:

Expression<Func<Employee, bool>> exp= em => em.EmployeeID > 2;

这里运算符'>'是在运行时由组合框选择的,它可以是'<','=','<>','包含'等等。

我的问题是,如何在选择运算符的情况下动态构建表达式?

重要的是,不允许使用选择性语句,例如"if"answers"switch"。

任何答案都将不胜感激。

使用动态比较运算符生成lambda表达式(谓词)

我将创建一个具有Func<Employee, bool>并重写ToString方法的类,以表示函数正在使用的运算符。然后,我将使用该类的ObservableCollection作为ComboBoxItemsSource

调用您的类Operator,执行操作的代码变为:

var op = dropDown.SelectedItem as Operator;
if (op != null)
{
  op.Function(employee);
}

如果lambda中的条件看起来很难看,可以使用函数

Expression<Func<Employee, bool>> exp= em => foo(em, otherParam);
public static bool foo(Employee em, otherType otherParam)
{
    ...
}