簡體   English   中英

過濾實體框架 6 中包含的元素

[英]Filter included elements in entity framework 6

我正在嘗試使用 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 嗎?

如您所見,EF 6 不支持在Include方法中進行過濾。

免責聲明:我是Entity Framework Plus項目的所有者

EF+ Query 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM