将MySqlDataReader记录转换为ObservableCollection <t>

时间:2016-12-07 14:00:28

标签: c# mysql mysqldatareader

我正在尝试将记录从Builder::operator()转换为(object.*method),但我总是以异常结束 - 无法转换类型&#39; System.Data.Common.DataRecordInternal&#的对象39;输入&#39; System.Data.IDataReader&#39;

Jon Skeet's answer over here 并在同一个答案中提及MySqlDataReader评论,我最后写下了代码,但我仍然没有找到如何获得该异常。

ObservableCollection<T>

我也尝试用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 dataDetails

1 个答案:

答案 0 :(得分:1)

仅为业力:-) IDataReader不是IEnumerable,也没有生成IEnumerable的方法 幸运的是,DataTable是行的集合,可以转换为可枚举 如果你的桌子不是很大

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