如果startDate
和endDate
是类级别的变量,你可以只使用一个方法:
bool FilterDate(YourEntityType x)
{
return EntityFunctions.TruncateTime(x.Date.Value) >= EntityFunctions.TruncateTime(startDate) &&
EntityFunctions.TruncateTime(x.Date.Value) <= EntityFunctions.TruncateTime(endDate));
}
这将通过以下方式调用:
var results = myobjects.Where(FilterDate);
但是,如果它们是本地变量,则您的 lambda 将关闭两个局部变量 (startDate
和endDate
),如果您重用单个委托,这可能会导致行为发生变化,除非范围始终保持不变。
一种选择可能是制作一个辅助方法:
static Func<YourEntityType, bool> CreateFilter(DateTime startDate, DateTime endDate)
{
Func<YourEntityType, bool> func = x => EntityFunctions.TruncateTime(x.Date.Value) >= EntityFunctions.TruncateTime(startDate) &&
EntityFunctions.TruncateTime(x.Date.Value) <= EntityFunctions.TruncateTime(endDate));
return func;
}
然后你可以这样写:
var results = myobjects.Where(CreateFilter(startDate, endDate));