使用IEnumerable <IEnumerable <string >>的更好方法

fos*_*son 5 c# ienumerable coding-style

我正在调用具有多个结果集(总是2)的存储过程,并将结果写入单独的文件(以管道分隔格式).我无法将结果集拆分为单独的存储过程.我正在使用IDataReader和IEnumerable在进程中保持尽可能少的内存.

有没有IEnumerable<IEnumerable<string>>比使用GetEnumerator/MoveNext/Current IEnumerable<string>更清楚的方式来消费我的内部传递给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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*ite 5

为什么不foreach循环?这是最基本的.