我在上下文(内存)中有实体,因为我用 Include() 加载了它们。
我有大约 25 个实体 (tph),我正在对每个实体运行以下查询:
actTph.TrainingProgramHistory_ConditionAndLoadParameter.Where(x => x.Level == 10).Select(x => x.ConditionAndLoadParameter).ToArray();
TrainingProgramHistory_ConditionAndLoadParameter 和 TrainingProgramHistory_ConditionAndLoadParameter.ConditionAndLoadParameters 在内存中,因为执行这些查询时,SQL-profile 什么也不记录。
每个 TPH 有大约 20 个 TrainingProgramHistory_ConditionAndLoadParameter 相关实体。
运行此查询 25 次(在我的 25 个 TPH 实体上)大约需要 3 秒!
如果我重构这个:
List<ConditionAndLoadParameter> measuredCalps = new List<ConditionAndLoadParameter>();
foreach (TrainingProgramHistory_ConditionAndLoadParameter tphCalp in actTph.TrainingProgramHistory_ConditionAndLoadParameter)
{
if (tphCalp.Level == 10)
{
measuredCalps.Add(tphCalp.ConditionAndLoadParameter);
}
}
然后它在 100 毫秒左右运行。
对于内存中的对象,Linq to Entities 怎么这么慢?我究竟做错了什么?