You should use SELECT TOP n...
.
The Query<T>
method has an optional parameter bool buffered = true
, which when true loops through the full resultset, reading each row into a List<T>
. You could make this parameter false, and the resulting IEnumerable<T>
would be "deferred" in the sense that the db query would not be executed until you use it, and the rows would be retrieved from the db side "one at a time" (calls IDataReader.Read
on each iteration).
So, yes, it can be "deferred". HOWEVER, you should still use TOP n
because otherwise you would still execute and prepare the resultset for 10000 records on the db side, although you may transport only the first n rows of those to the client.