public static DataTable CreateTable <T>()
        {
            Type entityType = typeof(T);
            var  table      = new DataTable(entityType.Name);
            var  properties = TypeDescriptor.GetProperties(entityType);

            foreach (PropertyDescriptor prop in properties)
            {
                // respect nullable types
                Type type = ConvertExtensions.IsNullable(prop.PropertyType)
                                        ? Nullable.GetUnderlyingType(prop.PropertyType)
                                        : prop.PropertyType;

                table.Columns.Add(prop.Name, type);
            }

            return(table);
        }