Я вызываю хранимую процедуру с несколькими наборами результатов (всегда 2) и записываю результаты в отдельные файлы (в формате с разделителями-вертикальными чертами). Я не могу разбить наборы результатов на отдельные хранимые процедуры. Я использую IDataReader и IEnumerable, чтобы сохранять как можно меньше памяти в процессе.
Есть ли более чистый способ использования моего IEnumerable
, чем использование GetEnumerator / MoveNext / Current для доступа к внутреннему IEnumerable
для перехода к File.AppendAllLines?
public void Execute()
{
var reader = GetLines();
using (var enumerator = reader.GetEnumerator())
{
enumerator.MoveNext();
File.AppendAllLines("file1.dat", enumerator.Current);
enumerator.MoveNext();
File.AppendAllLines("file2.dat", enumerator.Current);
}
}
public IEnumerable<IEnumerable<string>> GetLines()
{
Database db = DatabaseFactory.CreateDatabase("connectionStringKey");
using (var command = db.GetStoredProcCommand("getdata_sp"))
{
var reader = db.ExecuteReader(command);
yield return GetInnerEnumerable(reader);
reader.NextResult();
yield return GetInnerEnumerable(reader);
}
}
private IEnumerable<string> GetInnerEnumerable(IDataReader reader)
{
while (reader.Read())
{
object[] rowValues = new object[reader.FieldCount];
reader.GetValues(rowValues);
yield return String.Join("|", rowValues);
}
}