domenica 10 maggio 2015

convert linq query results to datatable C#

Il frammento di codice qui di seguito illustra una tecnica di come convertire il risultato di una query select di Linq  in un datatable, il tutto tramite il linguaggio C#

Funzione:

 public DataTable ConvertToDataTable(IEnumerable items)
        {
            var DataTableReturn = new DataTable();

            Type t = items.First().GetType();
            //Ottengo nome e tipo colonna
            foreach (System.Reflection.PropertyInfo propertyInfo in t.GetProperties())
            {
                //DataTableReturn.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType);
                DataTableReturn.Columns.Add(propertyInfo.Name,  typeof(string));
           
            }
            //caricamento dati
            foreach (var item in items)
            {

                DataRow row = DataTableReturn.NewRow();
                foreach (System.Reflection.PropertyInfo p in t.GetProperties())
                    row[p.Name] = p.GetValue(item, null) ?? DBNull.Value;
                DataTableReturn.Rows.Add(row);

            }


            return DataTableReturn;
        }

Esempio di utilizzo.

 var risultato = (from Dati in ListaElementi()
                               
                                 select new
                                 {
                                     CampoA = Dati.CampoA,
                                     CampoB = Dati.CampoB
                                 });

 DataTable DataTableReturn = ConvertToDataTable(risultato.AsEnumerable());

Nessun commento: