【发布时间】:2019-02-14 20:48:26
【问题描述】:
您好,我正在使用 EF6,我有大量数据可以从数据库中进行选择,我的查询如下:
var EntityInfo = _contextRegister.Entities.Where(x => x.IsDeleted != true).ToList();
foreach (var itm in EntityInfo)
{
Entity.Entity entity = new Entity.Entity();
entity.MainActivityId = itm.MainActivityId;
entity.SubGroupId = itm.SubGroupId;
entity.Id = Convert.ToInt32(itm.Id);
-------
entity.UAECityRegion = _contextFRAMEWORK.UAECityRegions.Where(m => m.Id == itm.UAECityRegionId).Select(m => m.RegionName).FirstOrDefault();
var voucherstautus = _contextRegister.EPayVoucherDatas.Where(m => m.EntityId == itm.Id).ToList();
foreach (var item in voucherstautus)
{
if (item.VoucherStatus == 10)
{
entity.PaymentStatus = Convert.ToInt32(item.VoucherStatus);
break;
}
}
entityList.Add(entity);
}
这个查询需要超过 10 分钟,我怎样才能使这个查询更好,或者我应该使用存储过程而不是框架?
【问题讨论】:
-
哪个查询?我数到 3。
-
所有这些都在一个方法中,您将看到嵌套循环,因此循环每个实体的速度很慢。
-
您将从数据库中拉出所有未删除的实体。然后你在本地迭代所有这些,为它们中的每一个获取来自数据库的另一组数据的列表。您如何期望这会很快?
-
是的@Oliver。我需要简化这个查询,或者我可以使用存储过程来克服时间问题吗?
-
一次写一个包含所有条件的查询会很快。那么写成LINQ查询或者存储过程也没什么区别。
标签: c# performance entity-framework