ADO.NET EF和LINQ分页记录&;转换为SQL
我看到ADO.NET EF和LINQ分页结构如下:ADO.NET EF和LINQ分页记录&;转换为SQL,linq,entity-framework,Linq,Entity Framework,我看到ADO.NET EF和LINQ分页结构如下: var query = ...your normal query here... int totalRecordCount = query.Count(); var pagedQuery = query.Skip(PageIndex*PageSize).Take(PageSize); 这段代码似乎查询了所有记录,将它们设置到本地内存中,因此它得到了总计数。之后,它使用skip函数将反记录分页到变量pagedQuery中。我错了吗?Comipl
var query = ...your normal query here...
int totalRecordCount = query.Count();
var pagedQuery = query.Skip(PageIndex*PageSize).Take(PageSize);
这段代码似乎查询了所有记录,将它们设置到本地内存中,因此它得到了总计数。之后,它使用skip函数将反记录分页到变量pagedQuery中。我错了吗?Comiple如何将其转换为SQL?这是另一种方法吗?如果您要查询的对象实现了
IQueryable
,它将根据您使用的扩展方法构建不同的查询。(如果您使用Linq to实体,则必须是)
然而,记录SQL并不像Linq到SQL那样简单
使用探查器,或尝试将此扩展方法添加到项目中的静态类:
static string ToTraceString<T>(this IQueryable<T> t)
{
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
return oqt.ToTraceString();
return "";
}
如果您正在查询的对象实现了
IQueryable
,它将根据您使用的扩展方法生成不同的查询。(如果您使用Linq to实体,则必须是)
然而,记录SQL并不像Linq到SQL那样简单
使用探查器,或尝试将此扩展方法添加到项目中的静态类:
static string ToTraceString<T>(this IQueryable<T> t)
{
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
return oqt.ToTraceString();
return "";
}
您可以运行SQL Server Profiler以查看它正在生成的SQL
我相信对Count()的调用执行SELECT Count(*),而Skip().Take()执行SELECT TOP N,因此您实际上并没有收回所有记录。您可以运行SQL Server Profiler来查看它到底生成了什么SQL
我相信对Count()的调用会执行SELECT Count(*),而Skip().Take()会执行SELECT TOP N,因此您实际上并没有收回所有记录。很好!我用nHibernate做过类似的事情。谢谢!var countQuery=query.Count()将返回int,这是不可查询的!谢谢,这是我的疏忽。很好!我用nHibernate做过类似的事情。谢谢!var countQuery=query.Count()将返回int,这是不可查询的!谢谢,这是我的疏忽。