作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用这个方法从EF中获取每一页的数据:
public IEnumerable<MyObj> GetByPage(int page, int perPage)
{
return context.MyObj.Skip((page - 1) * perPage).Take(perPage);
}
我想知道;此代码是否会获取 MyObj
的所有行并存储在内存中,然后将 Skip
和 Take
或全部上面的代码将转换为 SQL 命令?
如果全部首先存储在内存中,我如何使用 LINQ to 实体而不使用内存来Skip
和Take
?
最佳答案
只要您没有具体化查询(即调用 ToList()
/ToArray()
等,或对其进行迭代),您的 Skip
和 Take
方法将由作为 Entity Framework 一部分的 Linq to Entities 提供程序转换为 SQL。
所以回答你的问题:不,它不会获取所有数据并将其加载到内存中。
参见 this MSDN article以获得完整的解释。
关于c# - 在不将所有行都放入内存的情况下使用 LINQ to Entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703289/
我是一名优秀的程序员,十分优秀!