链接.SelectMany()在使用先前的内存集合方面具有更好的性能

时间:2015-09-15 19:15:01

标签: c# entity-framework linq

我有一个钻取图表的方法,可根据用户点击的列获取数据。使用Entity Framework 5,我的EF类如下(伪代码):

父母A类,B类:A,C类:B,
D类:B

所以A有很多B,B可以有​​很多C和D

该方法有一个用于单击列的开关,在切换语句之前我加载了B的集合,因为A从未在图表上使用过。

Activity

返回数据大约需要两秒钟(大约40行)。

我发现不是使用bList,而是(例如:对于案例C)使用

var bList = _db.ACollection.SelectMany(x => x.BCollection).ToList();
switch (columnClicked)
{
  case B:
    var items = bList.Select(//project to display item for chart);
  case C:
    var items = bList.SelectMany(x => x.CCollection).ToList().Select(//project);
  case D:
    //same as C
}

速度增加近10倍!

任何人都可以解释这个吗?

编辑(澄清) 在我投影图表细节项目的情况C中,我有一个方法来调用它来显示文本的颜色

_db.ACollection.SelectMany(x => x.BCollection).SelectMany(x => x.CCollection).ToList().Select(//project) 

0 个答案:

没有答案