使用实体框架选择范围

问题描述 投票:0回答:2

我在尝试最大化具有页面的列表视图的性能时遇到问题。

我想让实体框架做一个select语句,但只返回结果的一个范围(范围=列表视图一页的项目)。

我已经搜索了谷歌,但没有找到任何关于此的结果。我只发现我可以执行 .ToList().GetRange(start index, end index),但是所有项目都会加载到内存中,这就是我想避免的......

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

谢谢!

c# entity-framework linq-to-entities
2个回答
21
投票

使用

.Skip(startPosition).Take(numberOfItems).ToList()


2
投票

如果您不使用延迟加载,请务必在应用过滤器时在 Load() 之前使用 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

© www.soinside.com 2019 - 2024. All rights reserved.