Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ADO.NET EF和LINQ分页记录&;转换为SQL_Linq_Entity Framework - Fatal编程技术网

ADO.NET EF和LINQ分页记录&;转换为SQL

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

我看到ADO.NET EF和LINQ分页结构如下:

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,这是不可查询的!谢谢,这是我的疏忽。