过滤包含在 entity framework 6 中的元素
Filter included elements in entity framework 6
我正在尝试使用 Entity Framework6 获取 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(免费和开源)允许轻松过滤包含的实体。
要使用它,您只需将所有 "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;
}
我正在尝试使用 Entity Framework6 获取 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(免费和开源)允许轻松过滤包含的实体。
要使用它,您只需将所有 "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;
}