我熟悉使用.Read()来检测EOF
using (IDataReader reader = SqlHelper.ExecuteReader(_connectionString, "dbo.GetOrders"))
{
AssertOrder(reader);
while (reader.Read())
{
yield return FillRecord<Order>(reader, StringComparer.OrdinalIgnoreCase);
}
reader.Close();
}
Run Code Online (Sandbox Code Playgroud)
由于我遇到了一些奇怪的情况,FillRecord实际上推动了读者.所以现在while循环中的.Read()实际上会导致这个函数跳过一些行 - 因为我们正在前进两次.
我希望有一个IDataReader.EOF,但没有.有什么想法吗?
我想我可能在评论中明确表达了我的意见......但是,既然你要求“任何想法”......就在这里:
显然这是一个两秒钟的黑客工作,但你会明白的:
(你肯定想要实现 IDisposable (因为我认为 IDataReader 是??)等。可能只是让该类继承 IDataReader,并将该类实现为外观。或者变得真正酷并实现一个透明代理来劫持 Read方法。
public class DataReaderWithEOF
{
public bool EOF { public get; private set; }
private IDataReader reader;
public DataReaderWithEOF(IDataReader reader)
{
this.reader = reader;
}
public bool Read()
{
bool result = reader.Read();
this.EOF = !result;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)