小编NvR*_*NvR的帖子

如何在LINQ to Entities中重用字段过滤器

我正在使用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)

c# linq-to-entities entity-framework

7
推荐指数
1
解决办法
504
查看次数

标签 统计

c# ×1

entity-framework ×1

linq-to-entities ×1