【发布时间】:2023-02-11 01:10:43
【问题描述】:
有一个看起来像这样的查询
var myResult = await _context.Families.AsNoTracking().AsSplitQuery()
.Include(f => f.Dogs.Where(d => d.Name == "someName"))
.Where(f => f.Breed == "some breed")
.Where(f => f.Dogs.Count > 0)
.ToListAsync(cancellationToken);
使用了虚拟数据*
在我的查询中,我发现 include 语句按预期工作,但最后一个 .Where() 不是。我打算过滤所有“家庭”,他们有一只狗,名字 ==“someName”,品种 ==“some breed”。要点是,我只想返回名称 == "someName" 的狗列表中的狗
我发现最后一个 Where() 子句正在对整个狗列表进行 .count,而不是我们希望在响应中过滤的包含的狗。
当然可以在最后一个 .Where() 中复制 f.Dogs.Where(mp => mp.Name == "someName") 但是如果不重复逻辑就没有办法做到这一点。
- 需要拆分查询。包含多个包含的查询要大得多,但为了发布而将其缩短
我错过了什么
【问题讨论】: