我有以下过滤器:

Expression<Func<Employee, bool>> fromDateFilterFourDays = z => EntityFunctions.TruncateTime(z.FiringDate) >= EntityFunctions.TruncateTime(DateTime.Now.AddDays(-4));

Expression<Func<Employee, bool>> fromDateFilterSixDays = z => EntityFunctions.TruncateTime(z.FiringDate) >= EntityFunctions.TruncateTime(DateTime.Now.AddDays(-6));


我怎样才能使这个过滤器的代表?

我不想为每个给定的数字创建一个变量,即四天或六天。

最佳答案

我的理解是您要:


为代表输入两个参数,即雇员和天数。
将该表达式编译为委托。


第一部分可以通过将天添加到参数列表中来完成:

Expression<Func<Employee, int, bool>> fromDateFilter = (z, n) => EntityFunctions.TruncateTime(z.FiringDate) >= EntityFunctions.TruncateTime(DateTime.Now.AddDays(n));


第二种通过使用Compile方法:

var del = fromDateFilter.Compile();
// use it
del(employee, -4);

09-18 22:51