我使用以下查询从SQL Server使用Entity Framework获取结果:
/// <summary>
/// Get product list
/// </summary>
/// <returns></returns>
public List<Products> GetProductList(int pageIndex, int pageSize)
{
return (from p in ctx.Products
select p).Skip(pageIndex * pageSize).Take(pageSize).ToList();
}
内部如何运作?我的意思是哪个查询将在数据库中执行?
默认情况下是否使用延迟加载?
答案 0 :(得分:2)
简短回答:您发布的代码只会抛出异常:
方法'Skip'仅支持LINQ to Entities中的排序输入。必须在方法'Skip'
之前调用'OrderBy'方法
更长的答案:假设您在代码中加入了OrderBy
,并且您的实体框架正在定位最新版本的SQL Server(即SQL2012或更新版本),那么您将让SQL看起来像这样:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Column2] AS [Column2],
[Extent1].[Column3] AS [Column3],
[Extent1].[Column4] AS [Column4],
--etc
FROM [dbo].[Products] AS [Extent1]
ORDER BY [Extent1].[Id] ASC
OFFSET 5 ROWS FETCH NEXT 4 ROWS ONLY
请注意查询的最后一行,它使用OFFSET/FETCH
语法跳过5行并接下来的4行。
至于延迟加载问题,此处没有任何内容暗示您已将其禁用,因此默认情况下它将 on 。