C# 使用实体框架选择一个范围
我遇到了一个问题,就是如何最大化具有页面的listview的性能 我希望实体框架执行select语句,但只返回结果的一个范围(范围=listview一页的项目) 我在谷歌上搜索过,但没有找到任何关于这个的结果。我只发现我可以做一个.ToList().GetRange(开始索引,结束索引),但是所有的项目都会被加载到内存中,这就是我想要避免的 有人能告诉我这是否可以做到吗?(我不想使用存储过程或视图或类似的东西,因为我们的listview必须是可重用的…)C# 使用实体框架选择一个范围,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我遇到了一个问题,就是如何最大化具有页面的listview的性能 我希望实体框架执行select语句,但只返回结果的一个范围(范围=listview一页的项目) 我在谷歌上搜索过,但没有找到任何关于这个的结果。我只发现我可以做一个.ToList().GetRange(开始索引,结束索引),但是所有的项目都会被加载到内存中,这就是我想要避免的 有人能告诉我这是否可以做到吗?(我不想使用存储过程或视图或类似的东西,因为我们的listview必须是可重用的…) 谢谢 您应该能够使用.Take(x).T
谢谢 您应该能够使用
.Take(x).ToList()
编辑:很抱歉,请尝试
.Skip(startPosition).Take(numberOfItems).ToList()
如果您没有使用延迟加载,请确保在应用筛选器时在加载之前使用Query(),以避免在应用筛选器之前加载整个集合:
context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Skip(startPosition)
.Take(numberOfItems)
.Load()
.ToList();
使用查询方法时,通常最好关闭导航属性的延迟加载。这是因为否则整个集合可能会被延迟加载自动加载
执行筛选查询之前或之后的机制
有关更多详细信息:Skip(50)。在有序查询中使用(10)将从第50个开始为您提供10个项目。我认为命名
startPosition
有点混乱,因为它不是开始,而是在开始之前。它可能被命名为skipRows
@ninbit这是一个古老的答案!它应该是零索引位置,即跳过(1)。Take(1)
将跳过索引为0的项目,并返回索引为1的项目。但是是的,skipRows
更适合Skip
方法。