将 MySqlDataReader 记录转换为 ObservableCollection<T>
Converting MySqlDataReader records to ObservableCollection<T>
我正在尝试将记录从 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();
}
我也尝试用 ObservableCollection<ColumnItems> dataDetails
替换 var dataDetails
但又失败了,运气不好。我最终为上述异常找到了非常少的资源,并且无法收集到很多知识来解决这个异常。如何将数据填入我的 ObservableCollection<T>
?
只是为了业力:-)
IDataReader 不是 IEnumerable 并且没有生成 IEnumerable 的方法
幸运的是,DataTable 是行的集合,可以转换为可枚举的
如果你的table不是很大
DataTable dt = new DataTable();
dt.Load(reader);
var dataDetails=dt.AsEnumerable().Select(...
我正在尝试将记录从 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();
}
我也尝试用 ObservableCollection<ColumnItems> dataDetails
替换 var dataDetails
但又失败了,运气不好。我最终为上述异常找到了非常少的资源,并且无法收集到很多知识来解决这个异常。如何将数据填入我的 ObservableCollection<T>
?
只是为了业力:-) IDataReader 不是 IEnumerable 并且没有生成 IEnumerable 的方法 幸运的是,DataTable 是行的集合,可以转换为可枚举的 如果你的table不是很大
DataTable dt = new DataTable();
dt.Load(reader);
var dataDetails=dt.AsEnumerable().Select(...