Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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
C# Dapper的IEnumerable是否延迟或立即执行?_C#_Orm_Ienumerable_Dapper_Deferred Execution - Fatal编程技术网

C# Dapper的IEnumerable是否延迟或立即执行?

C# Dapper的IEnumerable是否延迟或立即执行?,c#,orm,ienumerable,dapper,deferred-execution,C#,Orm,Ienumerable,Dapper,Deferred Execution,当我在Dapper中执行查询并且只想检索一个记录块时,我可以使用.Skip.Take,还是需要在SQL中使用select top n* 例如,给定一个有10000条记录的表,我只想要前200条记录,因为我的列表页每页只显示200条记录。我运行这个吗 conn.Query<Widget>("select * from Widgets").Skip((page - 1) * size).Take(size); 或者这个: conn.Query<Widget>("select

当我在Dapper中执行查询并且只想检索一个记录块时,我可以使用.Skip.Take,还是需要在SQL中使用select top n*

例如,给定一个有10000条记录的表,我只想要前200条记录,因为我的列表页每页只显示200条记录。我运行这个吗

conn.Query<Widget>("select * from Widgets").Skip((page - 1) * size).Take(size);
或者这个:

conn.Query<Widget>("select top 200 * from Widgets");
Dapper的.Query方法是否延迟?

您应该使用SELECT TOP n

Query方法有一个可选参数bool buffered=true,当true遍历完整的结果集时,它会将每一行读取到一个列表中。您可以将此参数设为false,生成的IEnumerable将被延迟,因为在使用db查询之前不会执行该查询,并且在每次迭代中调用IDataReader.Read从db端一次检索一行


所以,是的,可以推迟。但是,您仍然应该使用TOP n,因为否则您仍然会在db端执行和准备10000条记录的结果集,尽管您可能只将这些记录的前n行传输到客户端。

当缓冲区设置为false时,您必须担心连接。如果在登录或推荐的AtList之前关闭它,它将失败并出现错误。