C#中將DataTable型別轉化為泛型集合
DataTable是什麼?
DataTable 是一個臨時儲存資料的網格虛擬表(表示記憶體中資料的一個表。)。DataTable是ADO dot net庫中的核心物件。它可以被應用在 VB 和 ASP 上。它無須程式碼就可以簡單的繫結資料庫。它具有微軟風格的使用者介面。
注意!!!
當訪問DataTable物件時,請注意它們是按條件區分大小寫的。例如,如果一個DataTable被命名為“mydatatable”,另一個被命名為“Mydatatable”,則用於搜尋其中一個表的字串被認為是區分大小寫的。但是,如果“mydatatable”存在而“Mydatatable”不存在,則認為該搜尋字串不區分大小寫。一個DataSet可以包含數個DataTable物件,它們具有相同的TableName屬性值和不同的Namespace屬性值。有關使用DataTable物件的更多資訊。
DataTable的作用是什麼?
在機房重構的時候我們都會將資料庫的資料讀取出來,經常使用的是就是DataTable資料型別,將資料庫中表的資訊讀取出來,存在臨時資料表中,即DataTable表,然後將在其他層中需要資料傳參的就直接將方法定義為DataTable型別的(除非有特殊要求)。而另一種儲存資料的方式就泛型集合,將DataTable轉換成泛型,然後通過泛型再去傳遞資料。
DataTable的資料改動需要根據資料庫表中的資訊操作,例如,如果我想將資料庫某表的某個新欄位讀取出來,那麼用DataTable需要重新檢視資料庫,然後間接就將資料庫中的資訊暴露了,除非是同一個人操作,不過那樣不靈活了。
泛型是什麼?
泛型是具有佔位符(型別引數)的類、結構、介面和方 法,這些佔位 符是類、結構、介面和方法儲存或者使用的一個或多個型別的佔位符。
泛型集合類可以將型別引數用作它所儲存的物件的型別的佔位符;型別引數作為其欄位的型別或其方法的引數型別出現。泛型的方法還可以將引數型別用作返回值型別或者某個形參的型別。
泛型集合其實就是一個個的實體類集合,我們在沒有接觸這個概念前,資料庫訪問返回的型別有實體、DataTable、Boolean。下面是畫了幾張示意圖:
使用泛型的好處?
如果不用泛型集合,你要是查詢有多少個使用者的時候(新增刪除使用者),單個實體和Boolean肯定是不行的,DataTable倒是可以,但是它因為高耦合(一個使用者資訊變化,就得修改DataTable),使系統執行的效能會不好.
如何DataTable型別轉化為泛型集合?
public List<T>ConvertToList<T>(DataTable dt) where T : new()
{
//初始化,獲得型別,string型別變數
List<T> ts = newList<T>();
//獲得此型別的模型
Type type = typeof(T);
String tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//獲得此模型的公共屬性
PropertyInfo[] propertys =t.GetType().GetProperties();
//foreach(型別 要用的變數名稱 in之前宣告的變數名稱)
foreach (PropertyInfo pi inpropertys)
{
tempName = pi.Name;
//檢查DataTable是否包含此列
if(dt.Columns.Contains(tempName))
{
// 判斷此屬性是否有Setter
if (!pi.CanWrite)continue;
object value =dr[tempName];
if (value !=DBNull.Value)
pi.SetValue(t,value, null);
}
}
ts.Add(t);
}
return ts;
}
但是沒理解他們到底有什麼不同,及時不用泛型,我也可以將資料來源存到DataTable,然後方法返回值也定義為DataTable型,請高手指點!
相關文章
- DataTable轉換list泛型集合(反射)泛型反射
- 泛型轉DataTable方法泛型
- C# 泛型集合的自定義型別排序C#泛型型別排序
- c#泛型集合C#泛型
- C# 泛型集合SortedListC#泛型
- Java中將 Jackson JsonNode 轉換為型別化集合JavaJSON型別
- 將sql中的money轉化為c#中的資料型別SQLC#資料型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- Rust中將陣列轉為集合型別的簡單方法Rust陣列型別
- C#中的介面和泛型集合探討C#泛型
- Java中將時間戳轉化為Date型別Java時間戳型別
- C#支援將json中的多種型別反序列化為object型別C#JSON型別Object
- C#類繼承自泛型集合C#繼承泛型
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- 泛型集合 list泛型
- 泛型集合 Queue泛型
- 將timestamp型別轉換為date型別型別
- C#學習 [型別系統] 泛型(16)C#型別泛型
- C#集合型別大盤點C#型別
- C#中常用集合型別C#型別
- C#中的泛型-1C#泛型
- 集合框架-通過Object轉型問題引入泛型框架Object泛型
- Java:Collection集合、泛型Java泛型
- Java集合和泛型Java泛型
- 集合框架-引入泛型框架泛型
- C# 泛型C#泛型
- C#泛型C#泛型
- 【C#】-泛型C#泛型
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- 泛型作為返回型別的寫法泛型型別
- C#集合型別大揭祕C#型別
- Java 中的泛型 集合(List,Set) MapJava泛型
- java中泛型之型別萬用字元(?)Java泛型型別字元
- Java中建立泛型型別的例項Java泛型型別
- 07.集合和泛型泛型
- 泛型型別(.NET 指南)泛型型別