假设我有两个表"Form“和"Status”。表单表包含一些属性和引用状态表的导航属性。
// Form table model
public class Form
{
...Some properties,
public ICollection<Status> Statuses { get; set; }
}
// Status table model
public class Status
{
...Some properties,
public DateTime FormTimeStart { get; set; }
public DateTime FormTimeFinish { get; set; }
}
问题是,我想从表格表中包括状态的整个数据,但我也想过滤状态表中的数据,如果今天早于到期日期。
这是我尝试过的方法,但没有任何响应。
var form = _context.Forms
.Include(s => s.Statuses.Where
(i => DateTime.Compare(DateTime.Now,i.FormTimeFinish) < 0))
.Include(t => t.FormTopics)
.ThenInclude(q => q.Questions)
.ToList();
发布于 2019-07-10 03:16:31
没有办法在一个查询中做到这一点。之后,您将需要显式加载Statuses
关系:
var form = await _context.Forms
.Include(t => t.FormTopics)
.ThenInclude(q => q.Questions)
.ToListAsync();
form.Statuses = await _context.Entry(form)
.Collection(x => x.Statuses).Query()
.Where(i => DateTime.Compare(DateTime.Now, i.FormTimeFinish) < 0))
.ToListAsync();
但是,要非常小心,因为您只有状态的一个子集。因此,如果您尝试保存表单,您最终将删除列表中没有的任何内容(在EF看来,就好像您从集合中删除了所有其他状态)。出于这个原因,最好在初始查询中禁用跟踪,以便在您意外忘记并尝试保存时会更明显地发现某些不正确的地方:
var form = await _context.Forms
.Include(t => t.FormTopics)
.ThenInclude(q => q.Questions)
.AsNoTracking()
.ToListAsync();
https://stackoverflow.com/questions/56959061
复制相似问题