这是我的查询
var geometrias = _context.Geometrias
.Include(g => g.GeometriaRegistos)
.Include(g => g.Matriz)
.ThenInclude(m => m.Referencia)
.Where(g => g.Matriz.ReferenciaId == referenciaId && !g.IsDeleted && !g.Matriz.IsDeleted)
.OrderByDescending(g => g.Id)
.Take(20)
.ToList();
我希望每个Geometria仅获得20个GeometriaRegistos
但是
.Include(g => g.GeometriaRegistos.Take(20))
不起作用
这是模型
public class GeometriaRegisto
{
public int Id { get; set; }
public float X1 { get; set; }
public float X2 { get; set; }
public float X3 { get; set; }
public float X4 { get; set; }
public int GeometriaId { get; set; }
public Geometria Geometria { get; set; }
public int ProducaoRegistoId { get; set; }
public ProducaoRegisto ProducaoRegisto { get; set; }
}
public class Geometria
{
public int Id { get; set; }
public string Componente { get; set; }
public bool IsDeleted { get; set; }
public int MatrizId { get; set; }
public Matriz Matriz { get; set; }
public ICollection<GeometriaRegisto> GeometriaRegistos { get; set; }
}
我曾经使用Dapper和SQL存储过程来做到这一点,但我试图使用linq来管理它,但是我找不到一种方法,而不必先将它们全部加载到内存中,然后再次进行过滤,但这是很多数据
答案 0 :(得分:0)
不幸的是,不支持这种情况。
当您.Include
时,实际上是在表示您希望建立关系的JOIN
。
为了实现您的期望,我建议您在不包含Geometrias
的情况下获取所有GeometriasRegistros
。然后选择您将获取的ID,例如grIds = geometrias.Select(g=>g.GeometriasRegistros.Take(20).Id).Distinct()
。下一步是根据这些ID进行查询并进行包装,只需手动填充您的收藏夹即可。
不是艺术品,但会起作用