实体泛型dbSet get datatable

时间:2016-06-12 02:38:52

标签: c# entity-framework generics

是否有可能从我已经尝试的通用dataTable获取entity.DbSet但是到目前为止获取数据的唯一方法是Local也许我错过了一个但我试过解析它如下DataSet ds = entityDbSet as DataSet;但不可能。
我想到的唯一方法就是将entity.dbSet放在一个列表中,基本上是循环的,但我相信这不是最好的主意。
我会尝试tolistasync,但我还没弄清楚如何使用它。

1 个答案:

答案 0 :(得分:2)

接口不兼容,你不能只是这样抛出它们。

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 

您可以做什么,这对您非常有帮助:

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

为了保证异步,您的方法必须是异步的,并且必须在等待之后完成转换。