Что вы называете "очень большой"? А что за строка? CLOB? BLOB? XML
Я подозреваю, что вы должны использовать такие вещи, как ExecuteReader()
, который (через IDataReader
) предоставляет методы для чтения таких столбцов в чанках:
using (var reader = cmd.ExecuteReader(
CommandBehavior.SequentialAccess)) {
char[] buffer = new char[8040]; // or some multiple (sql server page size)
while (reader.Read()) {
long dataOffset = 0, read;
while((read = reader.GetChars(colIndex, dataOffset, buffer, 0, buffer.Length)) > 0) {
// process "read"-many chars from "buffer"
dataOffset += read;
}
}
}
Очевидно, что с xml может потребоваться XmlReader
через cmd.ExecuteXmlReader()
.
Обновлен комментарий LINQ (теперь удален):
Чтобы использовать IDataReader
непосредственно из LINQ-to-SQL, я ожидаю, что самое близкое, что вы можете получить, это ctx.GetCommand()
, передав ему запрос. Затем вы должны использовать ExecuteReader
или ExecuteXmlReader
, как указано выше. Я мало что знаю об EF ...
Если вы приведете пример типа запроса, который не выполняется, могут быть возможны некоторые хитрости - например, если вы фильтруете или выбираете подмножества XML, есть вещи, которые вы можете сделать в SQL / XML - возможно, в UDF, вызываемом через LINQ-to-SQL.