Лучший способ использовать IEnumerable >

Я вызываю хранимую процедуру с несколькими наборами результатов (всегда 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);
        }
    }
5
задан foson 29 March 2011 в 20:08
поделиться