日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

如何高效的将 DataReader 转成 ListT ?

發布時間:2023/12/4 38 豆豆
默认站点 收集整理的這篇文章主要介紹了 如何高效的将 DataReader 转成 ListT ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • Anthony

我在使用第三方工具包,它返回了一個 DataReader,為了能更方便的使用,我希望有一種快捷方法能夠將它轉成 List<T>,除了一行一行的迭代賦值之外還有其他好的方式嗎?

回答區

  • pim

可以用反射實現,雖然性能低一點,但它可以幫你自動化的將 DataReader 映射到 List<T> 上,這里的 T 可以是你的任意類型,參考如下代碼:

public?static?class?DataRecordHelper {public?static?void?CreateRecord<T>(IDataRecord?record,?T?myClass){PropertyInfo[]?propertyInfos?=?typeof(T).GetProperties();for?(int?i?=?0;?i?<?record.FieldCount;?i++){foreach?(PropertyInfo?propertyInfo?in?propertyInfos){if?(propertyInfo.Name?==?record.GetName(i)){propertyInfo.SetValue(myClass,?Convert.ChangeType(record.GetValue(i),?record.GetFieldType(i)),?null);break;}}}} }public?class?Employee {public?int?Id?{?get;?set;?}public?string?LastName?{?get;?set;?}public?DateTime??BirthDate?{?get;?set;?}public?static?IDataReader?GetEmployeesReader(){SqlConnection?conn?=?new?SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);conn.Open();using?(SqlCommand?cmd?=?new?SqlCommand("SELECT?EmployeeID?As?Id,?LastName,?BirthDate?FROM?Employees")){cmd.Connection?=?conn;return?cmd.ExecuteReader(CommandBehavior.CloseConnection);}}public?static?IEnumerable?GetEmployees(){IDataReader?rdr?=?GetEmployeesReader();while?(rdr.Read()){Employee?emp?=?new?Employee();DataRecordHelper.CreateRecord<Employee>(rdr,?emp);yield?return?emp;}} }
  • Phil Cooper

對于你的需求,建議使用 Dapper 做這種映射,參考如下代碼:

public?List<CustomerEntity>?GetCustomerList() {using?(DbConnection?connection?=?CreateConnection()){return?connection.Query<CustomerEntity>("procToReturnCustomers",?commandType:?CommandType.StoredProcedure).ToList();} }

CreateConnection() 它用來創建數據庫連接,然后 Dapper 內部會通過 ILEmit 的方式實現 DataReader 和 Properties 之間的自動映射,非常方便。

  • Mohsen

我有一個好辦法,既不需要引用 ORM 組件,也不需要手工寫反射,借助 DataTable 和 JsonConvert 即可, 參考如下代碼:

public?static?void?Main(){var?dt?=?new?DataTable();dt.Load(yourDataReader);//?creates?a?json?array?of?objectsstring?json?=?Newtonsoft.Json.JsonConvert.SerializeObject(dt);//?this?is?what?you're?looking?for?right??List<YourEntityType>?list?=?Newtonsoft.Json.JsonConvert.DeserializeObject<List<YourEntityType>>(json);}

點評區

我個人在開發中,數據庫用 Dapper ,DTO之間用 AutoMapper,非常方便,大家可以參考參考。

總結

以上是默认站点為你收集整理的如何高效的将 DataReader 转成 ListT ?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。