2011-05-04 94 views
5

我有一个问题,试图最大化我们的具有页面的列表视图的性能。使用实体框架选择范围

我希望实体框架做一个select语句,但只返回一个范围的结果(范围= listview的一页的项目)。

我已经搜索谷歌,但没有在这发现任何结果。我只发现我可以做一个.ToList()。GetRange(开始索引,结束索引),但然后所有的项目将被加载在内存中,这就是我想避免...

有人可以告诉我这是否可以做到? (我不想使用存储过程或视图或类似的东西,因为我们的列表视图必须是可重用的...)

谢谢!

+1

跳过(50)在一个有序的查询。取(10)会给你10个项目从50开始。 – 2011-05-04 07:13:09

回答

13

您应该能够使用.Take(x).ToList()

编辑:很抱歉,请.Skip(startPosition).Take(numberOfItems).ToList()

+0

谢谢,这个诀窍:) – 2011-05-04 08:04:18

1

如果你不使用延迟加载一定应用过滤器时,为了避免装载时的装载()之前使用Query()在应用过滤器之前的整个集合:

context.Entry(blog) 
    .Collection(b => b.Posts) 
    .Query() 
    .Skip(startPosition) 
    .Take(numberOfItems) 
    .Load() 
    .ToList(); 

当使用Query方法时,通常最好关闭导航属性的延迟加载。这是因为否则整个集合可能会在执行过滤查询之前或之后通过延迟加载 机制自动加载。

有关详细信息:http://msdn.microsoft.com/en-us/data/jj574232.aspx