linq - 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);
解决方案
我最终通过直接选择新的 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 进行分组。最有可能使它变得更好的方法。
推荐阅读
- oracle - 不同账户中的 Amazon RDS Oracle 数据库快照还原
- ruby-on-rails - 能够获得最小值,单个查询中的记录数
- kotlin - Is it safe to use Check and Require in production code? - Kotlin
- npm - 如何在未安装 cdk 时使用上下文参数执行 cdk 命令,即使用 npm run cdk?
- java - 将 Java HashMap 转换为海龟三元组
- python - mpdl3 和 lmfit 安装在终端中的 conda 成功,但在 spyder 中导入时未找到
- javascript - Number() 如果为 null 或为空,则默认为 0
- php - “分组” PHP 类的正确方法
- html - 将 div 放在两个 div 之间的边界之上
- java - PSQLException:错误:“id”列中的空值在 SQL 插入期间违反了非空约束