9

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

例如,给定一个包含 10,000 条记录的表,我只想要前 200 条,因为我的列表页面每页只显示 200 条。我运行这个吗?

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

或这个:

conn.Query<Widget>("select top 200 * from Widgets");

Dapper 的.Query<T>方法是否延迟?

4

1 回答 1

11

你应该使用SELECT TOP n....

Query<T>方法有一个可选参数bool buffered = true,当为 true 时,它​​会遍历整个结果集,将每一行读入一个List<T>. 您可以将此参数设置为 false,并且结果IEnumerable<T>将是“延迟”的,因为在您使用它之前不会执行 db 查询,并且将“一次一个”地从 db 端检索行(IDataReader.Read调用每次迭代)。

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

于 2013-10-19T00:47:43.467 回答