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)