martedì 18 ottobre 2011

convert linq to DataTable

La funzione qui di seguito illustra una tecnica di come convertire un oggetto linq, ossia un risultato di una query di linq in un oggetto di tipo datatable, il tutto tramite il linguaggio C#







Funzione




public DataTable LINQToDataTable<T>(IEnumerable<T> varlista)




{




DataTable dttDati = new DataTable();




//oggetto per la gestione delle proprietà




PropertyInfo[] PropInfo = null;




if (varlista == null) return dttDati;




//effettuo un ciclo su tutti gli oggetti della lista




foreach (T rec in varlista)




{




// ottengo le informazioni dei campi e genero le varie colonne




if (PropInfo == null)




{




PropInfo = ((Type)rec.GetType()).GetProperties();




foreach (PropertyInfo pi in PropInfo)




{




Type colType = pi.PropertyType;




if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()




== typeof(Nullable<>)))




{




colType = colType.GetGenericArguments()[0];




}




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




}




}




//imposto i vari valori




DataRow dr = dttDati.NewRow();




foreach (PropertyInfo pi in PropInfo)




{




dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue




(rec, null);




}




dttDati.Rows.Add(dr);




}




return dttDati;




}







Per richiamarla







var risultato = (




from Dato in Array




select new




{




Dato.Campo1,




Dato.Campo2







});




DataTable dato = new DataTable();




dato = LINQToDataTable(risultato.AsEnumerable());

Nessun commento: