c# datatable list 相互转换

/*Converts List To DataTable*/
        public static DataTable ToDataTable<TSource>(IList<TSource> data)
        {
            DataTable dataTable = new DataTable(typeof (TSource).Name);
            PropertyInfo[] props = typeof (TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in props)
            {
                dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ??
                                                 prop.PropertyType);
            }
            foreach (TSource item in data)
            {
                var values = new object[props.Length];
                for (int i = 0; i < props.Length; i++)
                {
                    values[i] = props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);
            }
            return dataTable;
        }

        /*Converts DataTable To List*/
        public static List<TSource> ToList<TSource>(DataTable dataTable) where TSource : new()
        {
            var dataList = new List<TSource>();
            const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
            var objFieldNames = (from PropertyInfo aProp in typeof (TSource).GetProperties(flags)
            select new
            {
                Name = aProp.Name,
                Type = Nullable.GetUnderlyingType(aProp.PropertyType) ??
                        aProp.PropertyType
            }).ToList();
            var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
            select new
            {
                Name = aHeader.ColumnName,
                Type = aHeader.DataType
            }).ToList();
            var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();
            foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
            {
                var aTSource = new TSource();
                foreach (var aField in commonFields)
                {
                    PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
                    var value = (dataRow[aField.Name] == DBNull.Value)
                        ? null
                        : dataRow[aField.Name]; //if database field is nullable
                    propertyInfos.SetValue(aTSource, value, null);
                }
                dataList.Add(aTSource);
            }
            return dataList;
        }

  

时间: 2024-12-20 01:18:04

c# datatable list 相互转换的相关文章

C#知识体系(二)用案例来理解委托与事件

上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步.IO.套接字...这些东西我们平常用到的不多,都是些概念性的东西,也许是因为不熟悉而可以回避了使用这些东西,不可否认的是 就算不用这些我们依然能想到问题的解决办法.但是几乎所有语言都会有这些概念,因为在某些场景它们能发挥不可思议的能力. 其实我到现在还是没有掌握委托和事件,在工作或者设计中也尽量回

datatable list 之前相互转换

使用 FastMember: IEnumerable<SomeType> data = ... DataTable table = new DataTable(); using(var reader = ObjectReader.Create(data)) { table.Load(reader); } This uses the FastMember's meta-programming API for maximum performance. If you want to restrict

C# DataTable 和List之间相互转换的方法

一.List<T>/IEnumerable转换到DataTable/DataView private DataTable ToDataTable<T>(List<T> items) { var tb = new DataTable(typeof (T).Name); PropertyInfo[] props = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (

转 C# DataTable 和List之间相互转换的方法

一.List/IEnumerable转换到DataTable/DataView 方法一: /// <summary> /// Convert a List{T} to a DataTable. /// </summary> private DataTable ToDataTable<T>(List<T> items) {     var tb = new DataTable(typeof (T).Name);          PropertyInfo[]

C#.net开发 List与DataTable相互转换

在.NET开发中,操作关系型数据库提取数据经常用到DataTable.ASP.NET前后台数据绑定应用DataTable的时候似乎也很多,但是List集合比DataTable应用更加广泛,提取处理数据也更加方便,MVC绑定数据更倾向于List. 因此,我们会经常需要对List集合和DataTable数据进行互转,以下三个方法是实现List和DataTable互转,以及DataTable单行提取对象.好了,直接上代码了: 1.DataTable转List集合 /// <summary> /// 

C#.net开发 List与DataTable相互转换 【转】

http://blog.csdn.net/shuizhaoshui/article/details/51425527 在.NET开发中,操作关系型数据库提取数据经常用到DataTable.ASP.NET前后台数据绑定应用DataTable的时候似乎也很多,但是List集合比DataTable应用更加广泛,提取处理数据也更加方便,MVC绑定数据更倾向于List. 因此,我们会经常需要对List集合和DataTable数据进行互转,以下三个方法是实现List和DataTable互转,以及DataTa

ListView与DataTable相互转换

public static void dataTableToListView(ListView lv, DataTable dt) { if (dt != null) { lv.Items.Clear(); lv.Columns.Clear(); for (int i = 0; i < dt.Columns.Count; i++) { lv.Columns.Add(dt.Columns[i].Caption.ToString()); } foreach (DataRow dr in dt.Row

datatable与实体相互转换 反射

namespace Mall.Config{/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T">实体类</typeparam> public class ModelHandler<T> where T : new() { #region DataTable转换成实体类 /// <summary> /// 填充对象列表:

XML TO DataSet TO DataTable 相互转换

1 //遍历XML 获得 DataSet //XmlTextReader static void Main(string[] args) 2 { 3 string xmlData = @"D:\study\XMLtest\XMLtest\bin\Debug\bookstore.xml"; 4 DataSet t = ConvertXMLToDataSet(xmlData); 5 Console.WriteLine(t); 6 7 } 8 9 private static DataSet