我正在使用EF并且有一个数据库表,其中包含许多日期时间字段,这些字段在记录上执行各种操作时被填充.我目前正在构建一个报告系统,它涉及按这些日期过滤,但由于过滤器(这个日期在一个范围内等等)在每个字段上都有相同的行为,我想重用我的过滤逻辑,所以我只编写单个日期过滤器并在每个字段上使用它.
我的初始过滤代码类似于:
DateTime? dateOneIsBefore = null;
DateTime? dateOneIsAfter = null;
DateTime? dateTwoIsBefore = null;
DateTime? dateTwoIsAfter = null;
using (var context = new ReusableDataEntities())
{
IEnumerable<TestItemTable> result = context.TestItemTables
.Where(record => ((!dateOneIsAfter.HasValue
|| record.DateFieldOne > dateOneIsAfter.Value)
&& (!dateOneIsBefore.HasValue
|| record.DateFieldOne < dateOneIsBefore.Value)))
.Where(record => ((!dateTwoIsAfter.HasValue
|| record.DateFieldTwo > dateTwoIsAfter.Value)
&& (!dateTwoIsBefore.HasValue
|| record.DateFieldTwo < dateTwoIsBefore.Value)))
.ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但我更倾向于减少'Where'方法中的重复代码,因为每个日期字段的过滤算法都相同.
我更喜欢的是看起来像下面这样的东西(我稍后会为过滤器值创建一个类或结构),我可以使用扩展方法封装匹配算法:
DateTime? dateOneIsBefore = null;
DateTime? dateOneIsAfter = null;
DateTime? dateTwoIsBefore = null;
DateTime? dateTwoIsAfter = null;
using (var context …Run Code Online (Sandbox Code Playgroud)