Частично это зависит от того, является ли сам запрос потоковым или выполняет ли он много работы во временных таблицах , тогда (наконец-то) начинает возвращать данные.Вы не можете многое сделать во втором сценарии, кроме как переписать запрос;однако в первом случае блок итератора обычно помогает, например
public IEnumerable<Foo> GetData() {
// not shown; building command etc
using(var reader = cmd.ExecuteReader()) {
while(reader.Read()) {
Foo foo = // not shown; materialize Foo from reader
yield return foo;
}
}
}
Теперь это потоковый итератор - вы можете foreach
поверх него и он будет извлекать записи в реальном времени из входящих данных TDS без буферизациисначала все данные.
Если вы (возможно, мудро) не хотите писать свой собственный код материализации, есть инструменты, которые сделают это за вас - например, LINQ-to-SQL ExecuteQuery<T>(tsql, args)
сделаетсделать вышеописанное безболезненно.