0

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

Jon Skeet 在这里的回答和在同一个答案中引用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>?

4

1 回答 1

1

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

DataTable dt = new DataTable(); 
dt.Load(reader); 
var dataDetails=dt.AsEnumerable().Select(...
于 2016-12-08T09:06:04.560 回答