我在尝试最大化具有页面的列表视图的性能时遇到问题。
我想让实体框架做一个select语句,但只返回结果的一个范围(范围=列表视图一页的项目)。
我已经搜索了谷歌,但没有找到任何关于此的结果。我只发现我可以执行 .ToList().GetRange(start index, end index),但是所有项目都会加载到内存中,这就是我想避免的......
有人可以告诉我这是否可以做到吗? (我不想使用存储过程或视图或类似的东西,因为我们的列表视图必须可重用......)
谢谢!
使用
.Skip(startPosition).Take(numberOfItems).ToList()
如果您不使用延迟加载,请务必在应用过滤器时在 Load() 之前使用 Query() ,以避免在应用过滤器之前加载整个集合:
context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Skip(startPosition)
.Take(numberOfItems)
.Load()
.ToList();
使用 Query 方法时,通常最好关闭导航属性的延迟加载。这是因为否则整个集合可能会通过延迟加载自动加载 在执行过滤查询之前或之后的机制。