Publicado por: Carlos lunes, febrero 07, 2011

 

  1. /// <summary>  
  2. /// Exiende un metodo sobre una Lista para devolver un Dataset  
  3. /// con las columnas del objeto de la lista  
  4. /// </summary>  
  5. /// <typeparam name="T"></typeparam>  
  6. /// <param name="pList"></param>  
  7. /// <returns></returns>  
  8. public static DataTable ConvertTo<T>( this IList<T> pList )  
  9. {  
  10.   DataTable table = CreateTable<T>();  
  11.   Type entityType = typeof( T );  
  12.   PropertyDescriptorCollection properties = TypeDescriptor.GetProperties( entityType );  
  13.   foreach ( T item in pList )  
  14.   {  
  15.        DataRow row = table.NewRow();  
  16.        foreach ( PropertyDescriptor prop in properties )  
  17.             row[prop.Name] = prop.GetValue( item );  
  18.        table.Rows.Add( row );  
  19.   }  
  20.   return table;  
  21. }  
  22. /// <summary>  
  23. /// Devuelve un item de tipo T  
  24. /// </summary>  
  25. /// <typeparam name="T"></typeparam>  
  26. /// <param name="pRow">The p row.</param>  
  27. /// <returns></returns>  
  28. private static T CreateItem<T>( DataRow pRow )  
  29. {  
  30.   T obj = default( T );  
  31.   if ( pRow == null )  
  32.        return obj;  
  33.   obj = Activator.CreateInstance<T>();  
  34.   foreach ( DataColumn column in pRow.Table.Columns )  
  35.   {  
  36.        PropertyInfo prop = obj.GetType().GetProperty( column.ColumnName );  
  37.        object value = pRow[column.ColumnName];  
  38.        prop.SetValue( obj, value, null );  
  39.   }  
  40.   return obj;  
  41. }  
  42. /// <summary>  
  43. /// Crea un DataTable con columnas del tipo T  
  44. /// </summary>  
  45. /// <typeparam name="T"></typeparam>  
  46. /// <returns></returns>  
  47. private static DataTable CreateTable<T>()  
  48. {  
  49.   Type entityType = typeof( T );  
  50.   DataTable table = new DataTable( entityType.Name );  
  51.   PropertyDescriptorCollection properties = TypeDescriptor.GetProperties( entityType );  
  52.   foreach ( PropertyDescriptor prop in properties )  
  53.        table.Columns.Add( prop.Name, prop.PropertyType );  
  54.   return table;  
  55. }

Populares!

- Copyright © - Oubliette - -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -