miércoles, 7 de marzo de 2012

Convertir Linq to DataTable

En esta oportunidad me vi en la necesidad de convertir Linq hacia una DataTable.  Si es el caso de ustedes en este momento, pueden utilizar el código que a continuación les comparto:


        //Función que convierte de Linq a DataTable
        public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
        {
             DataTable dtReturn = new DataTable();

             PropertyInfo[] oProps = null;

             if (varlist == null) return dtReturn;

             foreach (T rec in varlist)
             {
                  //Uso reflection para obtener las propiedades, crear la tabla una sola vez.
                  if (oProps == null)
                  {
                       oProps = ((Type)rec.GetType()).GetProperties();
                       foreach (PropertyInfo pi in oProps)
                       {
                            Type colType = pi.PropertyType;

                            if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()    
                            ==typeof(Nullable<>)))
                             {
                                 colType = colType.GetGenericArguments()[0];
                             }

                            dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                       }
                  }

                  DataRow dr = dtReturn.NewRow();

                  foreach (PropertyInfo pi in oProps)
                  {
                       dr[pi.Name] = pi.GetValue(rec, null) == null ?DBNull.Value :pi.GetValue
                       (rec,null);
                  }

                  dtReturn.Rows.Add(dr);
             }
             return dtReturn;
        }

1 comentario:

  1. A brief registration form will appear the place you’ll have to add in a number of} particulars, together with your name, e mail, date of start, and distinctive password. The desk limits are structured to go well with|swimsuit} each high and low rollers. 카지노사이트 In addition, El Royale pays gamers quicker by providing a 24-48hrs hold time on payout requests. New customers are entitled to an infinite welcome bonus, and current customers can use any El Royale promo code to get pleasure from obtainable promotions.

    ResponderEliminar