c# - 将 Ado.net DataReader 转换为 IDataRecord 给出奇怪的结果

标签 c# linq ado.net

我有一个针对数据库运行的查询,我可以看到有 31/05/2013 的记录。当我使用 ADO.NET 从 C# 运行此查询,然后使用以下代码时,我丢失了 2013 年 5 月 31 日的记录

var timeSeriesList = new List<TimeSeries>();  
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        timeSeriesList = reader.Cast<IDataRecord>()
            .Select(r => new TimeSeries
                 {
                     MidRate = (double)r["MidRate"],
                     RiskFactorName = (string)r["RiskFactorName"],
                     SeriesDate = (DateTime)r["SeriesDate"]
                 }).ToList();

    }
}

但是,如果我对这段代码使用相同的查询:

var timeSeriesList = new List<TimeSeries>();                        
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        var timeSeries = new TimeSeries
                 {
                     MidRate = (double)reader["MidRate"],
                     RiskFactorName = (string)reader["RiskFactorName"],
                     SeriesDate = (DateTime)reader["SeriesDate"]
                 };

        timeSeriesList.Add(timeSeries);
    }
}

...那么 2013 年 5 月 31 日的记录在集合中 - 为什么第一段代码会给出这个结果?

最佳答案

我认为您在第一个示例中缺少记录,因为您将 reader 移动了一个然后再转换它。

试试这个改变,看看它是否有效:

var timeSeries = new List<TimeSeries>();  
using (var reader = cmd.ExecuteReader())
{
    if (reader.HasRows)
    {
        timeSeries = reader.Cast<IDataRecord>()
            .Select(r => new TimeSeries
                 {
                     MidRate = (double)r["MidRate"],
                     RiskFactorName = (string)r["RiskFactorName"],
                     SeriesDate = (DateTime)r["SeriesDate"]
                 }).ToList();
    }
}

关于c# - 将 Ado.net DataReader 转换为 IDataRecord 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916885/

相关文章:

c# - sqlite-net-pcl 中的 InsertAll 和 UpdateAll VS SQLite.Net-PCL 中的 InsertOrReplaceAll

c# - 如果您已经关闭 SqlConnection,是否需要关闭/处置 SqlDataReader?

.net - 将 Linq/Lambda 表达式转换为匿名方法

c# - MySQL 查询 C# 并保存到 XML

.net - 插入行时 Entity Framework 和 MySQL 空引用异常

c# - 如何让子面板填充父面板中的剩余空间?

c# - UWP WrapPanel 替换?

c# - 从字符串列名称动态创建 LINQ Select 表达式

c# - 按属性和这些属性的有序数组对 IEnumerable<Object> 进行排序

c# - ADO.NET Entity Framework 设计器的已知限制是什么?