Reklam

8 Nisan 2020 Çarşamba

C# DataTable To List Class Convert

Merhabalar

Buraya daha sonraları da kullanacağım kod bloğu bırakıyorum. İhtiyacı olan alsın :)
Bu kod sql ile çektiğiniz datatable nesnesini aynı propertylere sahip class ından oluşan list nesnesine çevirir. Üzerinde null kontrolleri ve diğer detaylı kontroller yapılmıştır.



 public static List<T> ConvertDataTable<T>(DataTable dt)
        {
            List<T> data = new List<T>();
            foreach (DataRow row in dt.Rows)
            {
                T item = GetItem<T>(row);
                data.Add(item);
            }
            return data;
        }




 private static T GetItem<T>(DataRow dataRow)
        {
            Type temp = typeof(T);
            T obj = Activator.CreateInstance<T>();

            foreach (DataColumn column in dataRow.Table.Columns)
            {
                foreach (PropertyInfo pro in temp.GetProperties())
                {
                    Type tProp = pro.PropertyType;

                    if (pro.Name == column.ColumnName && dataRow[column.ColumnName] != DBNull.Value)
                    {
                        var val = dataRow[column.ColumnName];
                        if (dataRow[column.ColumnName].GetType() == typeof(System.Int64))
                        {
                            val = Convert.ToInt32(dataRow[column.ColumnName]);
                        }

                        if (tProp.IsGenericType && tProp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                        {
                            //if it's null, just set the value from the reserved word null, and return
                            if (val == null)
                            {
                                pro.SetValue(val, null, null);
                                continue;
                            }

                            //Get the underlying type property instead of the nullable generic
                            tProp = new NullableConverter(pro.PropertyType).UnderlyingType;
                        }


                        pro.SetValue(obj, Convert.ChangeType(val, tProp), null);
                        //obj.SetPropertyValueFromString(pro.Name, val.ToString());
                    }
                    else
                        continue;
                }
            }
            return obj;
        }

Hiç yorum yok:

Yorum Gönder