【问题标题】:Filter included elements in entity framework 6过滤实体框架 6 中包含的元素
【发布时间】:2020-05-14 07:51:50
【问题描述】:

我正在尝试使用 Entity Framework 6 来获取 Person 实体的集合,其中包含延迟加载的 TimeTrack 实体集合。 我只想包括 TimeTrack 实体,其中 Start 属性位于指定时间段内。 下面的代码做了我想要的,但没有效果。

    private async Task<List<Person>> GetPersonsWithTimetracksForPeriod(int companyId, DateTime from, DateTime to)
    {
        // Repository.AsQueryable() gets context.AsQueryable() with the wanted type
        var query = Repository.AsQueryable().Where(e => e.CompanyId == companyId).Include(p => p.TimeTracks);
        var persons = await query.ToListAsync();
        // Another way of filtering TimeTracks is needed
        foreach (var person in persons)
        {
            person.TimeTracks = person.TimeTracks.Where(t => t.Start >= from && t.Start <= to).ToList();
        }
        return persons;
    }

有什么方法可以过滤查询中的 TimeTracks 吗?

【问题讨论】:

    标签: c# .net entity-framework-6


    【解决方案1】:

    如您所见,EF 6 不支持在 Include 方法中进行过滤。

    免责声明:我是项目的所有者Entity Framework Plus

    EF+ Query IncludeFilter(免费和开源)允许轻松过滤包含的实体。

    要使用它,您只需将所有“Include”替换为“IncludeFilter”即可。

    例子:

    private async Task<List<Person>> GetPersonsWithTimetracksForPeriod(int companyId, DateTime from, DateTime to)
    {
        var query = Repository.AsQueryable().Where(e => e.CompanyId == companyId)
                       .IncludeFilter(p => p.TimeTracks.Where(tt => t.Start >= from && t.Start <= to);
    
        var persons = await query.ToListAsync();
    
        return persons;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多