首页 > 解决方案 > System.Data.EntityProxies group by 不断进行大量选择 GroupBy linq

问题描述

我继承了这个项目,它使用 EF6 的动态代理。它从 repo 返回 IqueryAble(proxyObject)。我可以观看 SQL 分析器并看到它返回 6000 多条记录.. 太棒了!到目前为止,一切都很好。此时,我在该数据集上创建 3 个列表(比如 3 X 2000 条记录),因为每个列表都有过滤器逻辑,所以我还可以看到对 db 的调用以返回列表。伟大的!到目前为止 4 次调用数据库和 6000 条记录。

问题每次我运行这个组时...我都会接到 2000 个数据库调用!子列表中的每条记录一次调用。我猜是因为它每次都需要给物体充气?然而,它非常缓慢。

var lts = Sublist.GroupBy(p => p.proxyObject.ProvinceCode)
            .Select(n => new CountModel()
            {
                TypeName = n.Key,
                ItemCount = n.Count()
            }).ToList();

        PresentationModel.AddRange(lts);

标签: linqlinq-to-sqlentity-framework-6

解决方案


我最终通过直接选择新的 POCO 解决了这个问题。发生的事情是,因为实体是一堆底层存储库的组合......它最终导致 EF 只是创建了大量单独的查询,然后将它们汇总起来

 var last3Months =
            ProxyEntity.Where(l => DateTime.now() <= l.EffectiveDate)
                .Select(l => new ModelMicro()
                {
                    x= l.x,
                    y= l.y,
                    z= l.z
                });

这导致对 db 的一次调用返回 6000 行,然后我可以在需要的地方转移。然后,我在基础回报中对 z 进行分组。最有可能使它变得更好的方法。


推荐阅读