2015-01-02 29 views
7

Witam Próbuję przekonwertować wynik DbContext na DataTable. Mam jeden class, tj. , który inheritsDbContext. W tej klasie mam jeden obiekt DbSet, tj. public virtual DbSet<imagecomment> ImageComments { get; set; }. Używam ramy Code first entity.Konwertuj DbContext na Datatable w Code first entity framework

Oto moje zapytanie.

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

Oto jestem chcą przekształcić result do DataTable. Jak mogę to przekonwertować?

Odpowiedz

11

można wykorzystać metodę rozszerzenia, które konwertuje Generic listy, aby DataTable, można użyć IQueryable/IEnumerable również zamiast IList, wykonaj kod

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; 
    } 

jeśli nie wykorzystali metodę rozszerzenia przed patrz msdn

źródło: https://stackoverflow.com/a/5805044/1018054

Mam nadzieję, że to pomoże!

+0

Dziękuję za odpowiedź. Jak możesz to nazwać? –

+0

Użyłem metody rozszerzenia, ale w moim przypadku w jaki sposób można wywołać tę metodę? –

+0

można utworzyć klasę statyczną i tę metodę wewnątrz, a następnie result.ToDatatable(), i hv podane msdn ref. proszę spojrzeć na to, aby uzyskać więcej informacji na ten temat .. –