Convert DataTable to List

I have learned the previous article< Convert list < T > to DataTable>http://www.cnblogs.com/insus/p/8043173.html


In that article, we will learn to reverse and convert datatable to list < T >. This method is widely used. In many cases, the data read from the data is a DataSet or a DataTable. You need to convert them to list < T > and then to json.

Next, Insus.NET writes an extension method:

 

 public static List<T> ToList<T>(this DataTable dt)
        {
            var dataColumn = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList();

            var properties = typeof(T).GetProperties();
            string columnName = string.Empty;

            return dt.AsEnumerable().Select(row =>
            {
                var t = Activator.CreateInstance<T>();
                foreach (var p in properties)
                {
                    columnName = p.Name;
                    if (dataColumn.Contains(columnName))
                    {
                        if (!p.CanWrite)
                            continue;

                        object value = row[columnName];
                        Type type = p.PropertyType;

                        if (value != DBNull.Value)
                        {
                            p.SetValue(t, Convert.ChangeType(value, type), null);
                        }
                    }
                }
                return t;
            }).ToList();
        }
Source Code

 

Next, create a DataTable manually and add some data rows. Object is the object of the previous article:

 

 class Ba
    {
        public void ConvertDataTableToListToTestDemo()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Account", typeof(string));
            dt.Columns.Add("Email", typeof(string));

            dt.Rows.Add(1, "A0001", "A0001@email.com");
            dt.Rows.Add(2, "A0002", "A0002@email.com");
            dt.Rows.Add(3, "A0003", "A0003@email.com");

            List<Ay> ays = dt.ToList<Ay>();

            ays.ForEach(delegate (Ay ay)
            {
                Console.WriteLine(ay.ToString());
            });
            
            Console.WriteLine("\n\r");
        }
    }
Source Code

 

The red box in the figure above is the 23 line code, which is the core code of this article. Convert DataTable to list < T >.

 

Test the following code on the console:

Tags: C# JSON

Posted on Mon, 18 May 2020 08:54:16 -0700 by SauloA