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:
Posta un commento