在C#中,數(shù)據(jù)的操作是至關(guān)重要的一個方面,常常需要將數(shù)據(jù)從一個形式轉(zhuǎn)換成另一個形式以滿足我們的需求。其中,DataTable和List是常見的兩種數(shù)據(jù)形式。DataTable是一種表格形式的數(shù)據(jù)類型,它以行和列的形式存儲數(shù)據(jù)。List是一種集合類型,它可以存儲任意類型的對象,并且可以動態(tài)增加或刪除元素。在許多情況下,我們需要將DataTable轉(zhuǎn)換成List,以便于進行后續(xù)的操作和使用。本文將介紹如何在C#中將DataTable轉(zhuǎn)化成ListT的方法,其中T代表任意需要的類型。
- 使用反射
使用反射是將DataTable轉(zhuǎn)換成ListT的一種常見方法。反射是一種與類型相關(guān)的編程模型,它允許程序員遍歷并操作一個程序集里面的元數(shù)據(jù)。
1.1 創(chuàng)建一個泛型方法
首先,我們需要在C#中創(chuàng)建一個泛型方法,該方法可以將 DataTable 轉(zhuǎn)換成 List. 泛型方法是一種可以處理任何類型參數(shù)的方法。
public static List<T> ConvertDataTableToList<T>(DataTable table) where T : class, new()
{
List<T> list = new List<T>();
foreach (DataRow row in table.Rows)
{
T obj = new T();
foreach (PropertyInfo info in obj.GetType().GetProperties())
{
if (table.Columns.Contains(info.Name))
{
if (row[info.Name] != DBNull.Value)
{
info.SetValue(obj, row[info.Name], null);
}
}
}
list.Add(obj);
}
return list;
}
1.2 將DataTable轉(zhuǎn)換成ListT
然后,我們可以調(diào)用上面創(chuàng)建的方法將DataTable轉(zhuǎn)換成ListT。
DataTable table = new DataTable();
//添加列,省略
List<MyClass> list = ConvertDataTableToList<MyClass>(table);
- 使用LINQ查詢
除了使用反射之外,我們還可以使用LINQ查詢將DataTable轉(zhuǎn)換成ListT。LINQ查詢是一種強大的查詢工具,可以在C# 內(nèi)部把各種數(shù)據(jù)轉(zhuǎn)換成查詢結(jié)果。這里我們要使用DataTable的AsEnumerable方法和LINQ Select方法。
List<MyClass> list = table.AsEnumerable().Select(row =>
{
MyClass obj = new MyClass();
obj.Field1 = row.Field<type>("ColumnName1");
obj.Field2 = row.Field<type>("ColumnName2");
obj.Field3 = row.Field<type>("ColumnName3");
return obj;
}).ToList();
其中type是你的字段類型,MyClass是你設(shè)定的目標類型,在Linq 的Select方法中,我們設(shè)置了在遍歷每一行時對MyClass中的每一個字段進行賦值。最后將結(jié)果轉(zhuǎn)換成一個List類型。
總結(jié):
以上是兩種將DataTable轉(zhuǎn)換成ListT的方法,具體各有優(yōu)劣,可以根據(jù)自己的需求選擇合適的方法。使用反射可以處理任何類型參數(shù),并且在類型不確定的情況下非常有效,但是在性能上略微低于使用LINQ。而使用LINQ則可以通過語句鏈輕松處理大量的數(shù)據(jù),代碼可讀性較好。文章來源:http://www.zghlxwxcb.cn/news/detail-570463.html
無論你選擇哪一種方法,都需要仔細選擇和考慮,在類型和性能方面權(quán)衡取舍。文章來源地址http://www.zghlxwxcb.cn/news/detail-570463.html
到了這里,關(guān)于C#中將DataTable轉(zhuǎn)化成ListT的方法解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!