2016-06-12 7 views
3

Ist es möglich, dataTable von einem generischen entity.DbSet zu bekommen ich versucht habe, aber der einzige Weg, um Daten zu erhalten, die bisher gearbeitet ist die Local vielleicht habe ich ein, aber ich versuchte es wie unten
DataSet ds = entityDbSet as DataSet; Parsen aber es ist nicht möglich.
Der einzige Weg, an den ich denke, ist die entity.dbSet in eine Liste zu setzen, im Grunde Looping, aber ich bin sicher, es ist nicht die beste Idee.
ich würde versuchen, tolistasync, aber ich habe noch nicht herausgefunden, wie man es benutzt.Einheit generic dbSet bekommen Datatable

Antwort

1

Die Schnittstellen sind nicht kompatibel und man kann sie nicht einfach so darstellen.

public class DbSet<TEntity> : DbQuery<TEntity>, IDbSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>, IQueryable, IEnumerable, IInternalSetAdapter where TEntity : class 

public class DataSet : MarshalByValueComponent, System.ComponentModel.IListSource, IXmlSerializable, ISupportInitializeNotification, ISerializable 

Was können Sie tun, und dies wird sehr hilfreich für Sie sein:

var users = dbContext.Users.ToListAsync().Result.ToDataTable(); 

public static class DataTableExtensions 
{ 
    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; 
    } 
} 

Convert DbContext to Datatable in Code first entity framework

die asynchrone Um zu garantieren, Ihre Methode Asynchron sein müssen und die Umwandlung von Most nach der Erwartung getan .