sql查询中缺少C#Top和Groupby
我目前正在优化一个不符合性能要求的功能。它使用了延迟加载,这导致函数运行速度非常慢,列表中的项目不多 我要查询的主表是一个具有以下架构的表: (Id、ParentId、ChildId) 这可以表示为 存在双向关系的地方 现在通过这个查询,我尝试对连接的项目进行分组,其值是连接列表。此外,我希望这项技术的最高价值也是性能提升 这是我的删除代码:sql查询中缺少C#Top和Groupby,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我目前正在优化一个不符合性能要求的功能。它使用了延迟加载,这导致函数运行速度非常慢,列表中的项目不多 我要查询的主表是一个具有以下架构的表: (Id、ParentId、ChildId) 这可以表示为 存在双向关系的地方 现在通过这个查询,我尝试对连接的项目进行分组,其值是连接列表。此外,我希望这项技术的最高价值也是性能提升 这是我的删除代码: var connections = _context.Entity .Include(x => x.ParentFK.Select(y =&
var connections = _context.Entity
.Include(x => x.ParentFK.Select(y => y.Parent))
.Include(x => x.ChildFK.Select(y => y.Child))
.First(x => x.Id == id)
.Parents
.Concat(entity.Children)
.GroupBy(connection => connection.ChildId == entity.Id ? connection.Parent : connection.Child, conn => conn)
.Take(7)
.ToList();
在这个查询中,sql的顶部和groupby都丢失了,这使我相信所有的数据都被带到内存中,然后分组并覆盖
如何在sql查询本身中获得这些信息
谢谢
更新:我重新安排了一些查询,使其更加简单。但是,我仍然没有在生成的SQL中看到top或GROUPBY子句
var connections1 = _context.Connections
.Include(x => x.Parent)
.Include(x => x.Child)
.Where(x => x.ChildId == entity.Id || x.ParentId == entity.Id)
.GroupBy(connection => connection.ChildId == entity.Id ? connection.Parent : connection.Child, conn => conn)
.Take(7)
.ToList();
父母的编译时类型是什么?你说的“顶端缺失”是什么意思?生成的SQL查询是什么?哇-哪里应用了
Group
和Take
?First()
调用实际上执行查询。这不是EF的怪癖——这是一个获得列表第一个结果的明确请求。在此之后,在单个objectParents上工作的所有内容都是一个虚拟的ICollection。此外,生成的SQL查询相当大。基本上,它进行了大量的连接,并选择了大量的列,这是非常好的,也是预期的。我希望在查询的底部看到一个groupby子句,在。。。顶部哈哈。。没错。它可能是第一个执行查询的。也许我需要重新安排一些事情。