2015-01-02 14 views
7

Hallo, ich versuche DbContext Ergebnis zu konvertieren DataTable. Ich habe eine class, d. H. ClientTemplateModel welche inheritsDbContext. In dieser Klasse habe ich einen DbSet Gegenstand, d.h. public virtual DbSet<imagecomment> ImageComments { get; set; }. Ich benutze Code erste Entität Framework.Convert DbContext zu Datatable in Code erste Entität Framework

Hier ist meine Abfrage.

using (ClientTemplateModel context = new ClientTemplateModel(connectionString)) 
{ 
    var result = context.ImageComments.Where(p => p.Dcn == dcn).OrderByDescending(p => p.CommentsDateTime); 
} 

Hier bin ich möchte die result in DataTable konvertieren. Wie kann ich das konvertieren?

Antwort

11

Sie Extension-Methode verwenden können, die Ihre allgemeine Liste Um Datentabelle konvertiert, können Sie IQueryable/IEnumerable auch statt IList, folgen Sie den Code

public static DataTable ToDataTable<T>(this IList<T> data) 
    { 
     PropertyDescriptorCollection properties = 
      TypeDescriptor.GetProperties(typeof(T)); 
     DataTable table = new DataTable(); 
     foreach (PropertyDescriptor prop in properties) 
      table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType); 
     foreach (T item in data) 
     { 
      DataRow row = table.NewRow(); 
      foreach (PropertyDescriptor prop in properties) 
       row[prop.Name] = prop.GetValue(item) ?? DBNull.Value; 
      table.Rows.Add(row); 
     } 
     return table; 
    } 

, wenn Sie nicht-Extension-Methode verwendet haben, verwenden, bevor finden Sie msdn

Quelle: https://stackoverflow.com/a/5805044/1018054

Hoffe, das hilft !!!

+0

Vielen Dank für die Antwort. Wie kann man das nennen? –

+0

Ich habe die Erweiterungsmethode verwendet, aber in meinem Fall wie kann diese Methode aufgerufen werden? –

+0

Sie können eine statische Klasse und diese Methode innerhalb und dann result.ToDatatable() erstellen, ich hv gegeben msdn ref. Bitte schauen Sie sich das an, um mehr darüber zu erfahren. –