0

MySqlDataReaderレコードを からに変換しようとしてObservableCollection<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 dataDetailsてみましたObservableCollection<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 に答える