使用动态比较运算符生成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"。
任何答案都将不胜感激。
我将创建一个具有Func<Employee, bool>
并重写ToString
方法的类,以表示函数正在使用的运算符。然后,我将使用该类的ObservableCollection
作为ComboBox
的ItemsSource
。
调用您的类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)
{
...
}