完整的DataTable和list转换
- public class CollectionHelper
- {
- private CollectionHelper()
- {
- }
- public static DataTable ConvertTo<T>(IList<T> list)
- {
- DataTable table = CreateTable<T>();
- Type entityType = typeof(T);
- PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
- foreach (T item in list)
- {
- DataRow row = table.NewRow();
- foreach (PropertyDescriptor prop in properties)
- {
- row[prop.Name] = prop.GetValue(item);
- }
- table.Rows.Add(row);
- }
- return table;
- }
- public static IList<T> ConvertTo<T>(IList<DataRow> rows)
- {
- IList<T> list = null;
- if (rows != null)
- {
- list = new List<T>();
- foreach (DataRow row in rows)
- {
- T item = CreateItem<T>(row);
- list.Add(item);
- }
- }
- return list;
- }
- public static IList<T> ConvertTo<T>(DataTable table)
- {
- if (table == null)
- {
- return null;
- }
- List<DataRow> rows = new List<DataRow>();
- foreach (DataRow row in table.Rows)
- {
- rows.Add(row);
- }
- return ConvertTo<T>(rows);
- }
- public static T CreateItem<T>(DataRow row)
- {
- T obj = default(T);
- if (row != null)
- {
- obj = Activator.CreateInstance<T>();
- foreach (DataColumn column in row.Table.Columns)
- {
- PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
- try
- {
- object value = row[column.ColumnName];
- prop.SetValue(obj, value, null);
- }
- catch
- {
- // You can log something here
- throw;
- }
- }
- }
- return obj;
- }
- public static DataTable CreateTable<T>()
- {
- Type entityType = typeof(T);
- DataTable table = new DataTable(entityType.Name);
- PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
- foreach (PropertyDescriptor prop in properties)
- {
- table.Columns.Add(prop.Name, prop.PropertyType);
- }
- return table;
- }
- }
- To see the full code in action, check this sample out:
- public class MyClass
- {
- public static void Main()
- {
- List<Customer> customers = new List<Customer>();
- for (int i = 0; i < 10; i++)
- {
- Customer c = new Customer();
- c.Id = i;
- c.Name = "Customer " + i.ToString();
- customers.Add(c);
- }
- DataTable table = CollectionHelper.ConvertTo<Customer>(customers);
- foreach (DataRow row in table.Rows)
- {
- Console.WriteLine("Customer");
- Console.WriteLine("---------------");
- foreach (DataColumn column in table.Columns)
- {
- object value = row[column.ColumnName];
- Console.WriteLine("{0}: {1}", column.ColumnName, value);
- }
- Console.WriteLine();
- }
- RL();
- }
- #region Helper methods
- private static void WL(object text, params object[] args)
- {
- Console.WriteLine(text.ToString(), args);
- }
- private static void RL()
- {
- Console.ReadLine();
- }
- private static void Break()
- {
- System.Diagnostics.Debugger.Break();
- }
- #endregion
- }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?