c# - 将 MySqlDataReader 记录转换为 ObservableCollection<T>

标签 c# mysql mysqldatareader

我正在尝试转换来自 MySqlDataReader 的记录至ObservableCollection<T>但我总是以异常结束 - 无法将“System.Data.Common.DataRecordInternal”类型的对象转换为“System.Data.IDataReader”类型

来自Jon Skeet's answer over here 并引用SLaks在同一个答案中发表评论,我最终写了下面的代码,但我仍然不知道如何得到该异常。

ObservableCollection<ColumnItems> DataList;
using (MySqlCommand cmd = new MySqlCommand(_query))
{
       await Global.currentConnection.OpenAsync();
       cmd.Connection = Global.currentConnection;
       MySqlDataReader reader = cmd.ExecuteReader();
       var dataDetails = reader.Cast<IDataReader>().Select(x => new ColumnItems
       {
             col1 = x["col1"] is DBNull ? null : x["col1"].ToString(),
             col2 = x["col2"] is DBNull ? null : x["col2"].ToString(),
             col3 = x["col3"] is DBNull ? null : x["col3"].ToString(),
             col4 = x["col4"] is DBNull ? null : x["col4"].ToString()
       });
       DataList = new ObservableCollection<ColumnItems>(dataDetails);
       //Exception while assigning data
       await Global.currentConnection.CloseAsync();
}

我还尝试替换 var dataDetailsObservableCollection<ColumnItems> dataDetails但再次失败,运气不佳。我最终发现上述异常的资源很少,并且无法收集太多知识来解决此异常。如何将数据填充到我的ObservableCollection<T>中?

最佳答案

只是为了业力:-) IDataReader 不是 IEnumerable,并且没有方法生成 IEnumerable 幸运的是,DataTable 是行的集合,可以转换为可枚举的 如果你的 table 不是很大

DataTable dt = new DataTable(); 
dt.Load(reader); 
var dataDetails=dt.AsEnumerable().Select(...

关于c# - 将 MySqlDataReader 记录转换为 ObservableCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41019391/

相关文章:

c# - 将对象属性值转换为字典

c# - 如何创建具有不同资源文件的通用 ViewModel?

mysql - 如何在 LIKE 语句中定义查询

mysql - 如何从一个 DBCommand 对象执行两个单独的查询?

c# - 在 C# 中使用 MySQLConnection 无法正常关闭

c# - 性能问题 - 取消订阅事件

c# - 减少成员类中列表属性的数量

PHP/Mysql -> 平均每个用户的计费/支付日期

PHP 数据对象从表中获取字段名称

mysql - .NET MySql "Using"关闭数据读取器?