如何将列表转换为数据表[重复]
Posted
技术标签:
【中文标题】如何将列表转换为数据表[重复]【英文标题】:How to convert a list into data table [duplicate] 【发布时间】:2013-08-08 16:13:21 【问题描述】:我有一个包含一些属性的数据列表。我想将该列表数据转换为数据表。如何将列表转换为数据表。
【问题讨论】:
您能给我们提供有关列表中对象类型的信息吗? 【参考方案1】:添加这个函数并调用它,它会将List 转换为DataTable。
public static DataTable ToDataTable<T>(List<T> items)
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
//Defining type of data column gives proper data table
var type = (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) ? Nullable.GetUnderlyingType(prop.PropertyType) : prop.PropertyType);
//Setting column names as Property names
dataTable.Columns.Add(prop.Name, type);
foreach (T item in items)
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
dataTable.Rows.Add(values);
//put a breakpoint here and check datatable
return dataTable;
【讨论】:
这个函数怎么调用,谢谢回复 假设你有一个 User.List您可以使用此扩展方法并像这样调用它。
DataTable dt = YourList.ToDataTable();
public static DataTable ToDataTable<T>(this List<T> iList)
DataTable dataTable = new DataTable();
PropertyDescriptorCollection propertyDescriptorCollection =
TypeDescriptor.GetProperties(typeof(T));
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i];
Type type = propertyDescriptor.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
type = Nullable.GetUnderlyingType(type);
dataTable.Columns.Add(propertyDescriptor.Name, type);
object[] values = new object[propertyDescriptorCollection.Count];
foreach (T iListItem in iList)
for (int i = 0; i < values.Length; i++)
values[i] = propertyDescriptorCollection[i].GetValue(iListItem);
dataTable.Rows.Add(values);
return dataTable;
【讨论】:
正是我想要的! 这给了我List
string
类型的数值。【参考方案3】:
private DataTable CreateDataTable(IList<T> item)
Type type = typeof(T);
var properties = type.GetProperties();
DataTable dataTable = new DataTable();
foreach (PropertyInfo info in properties)
dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
foreach (T entity in item)
object[] values = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
values[i] = properties[i].GetValue(entity);
dataTable.Rows.Add(values);
return dataTable;
【讨论】:
ConvertListToDataTable(...);
在 dotnet 中是未知的,除非您访问此页面,您可以在其中找到此方法的代码`social.msdn.microsoft.com/Forums/vstudio/en-US/…以上是关于如何将列表转换为数据表[重复]的主要内容,如果未能解决你的问题,请参考以下文章