【问题标题】:How to get entity list dynamically in entity framework如何在实体框架中动态获取实体列表
【发布时间】:2014-01-13 17:10:16
【问题描述】:

我需要从实体框架中检索动态对象列表以生成动态报告。 Normally, In EF: db.People.ToList() will return pepole list.

我这里需要的是一种动态的方式。

即,如果用户将“人员”传递给以下方法,则应返回人员列表。如果是'Address',则返回地址对象列表。

public IEnumerable<object> GetReportModelList(string viewName)
    {          

        var reportList = _baseEntities.Database.SqlQuery<dynamic>(string.Format("Select * from [dbo].{0}", viewName);

        foreach (var report in reportList)
        {
            var test = report.GetType().GetProperty("DimensionCode");
            var test2 = report.GetType().GetProperties();
            //foreach(PropertyInfo prop in report.GetType().GetProperties())
            //{
            //    String value = prop.GetValue(report, null);
            //}
        }

        return null;
    }

正如上面的代码,我正在努力从动态对象中获取属性值。有什么建议吗?

【问题讨论】:

    标签: entity-framework asp.net-mvc-4 c#-4.0 entity-framework-4 lambda


    【解决方案1】:

    什么是db?如果它派生自 DbContext,您可以像这样使您的方法通用:

    public IEnumerable<T> GetReports<T>() where T : class
    {
       return db.Set<T>().AsEnumerable();
    }
    

    你可以这样称呼它:

    var personList = GetReports<People>();
    

    或:

    var addressList = GetReports<Address>();
    

    【讨论】:

    • 您是否已经或能够在您的 DbContext 类中为您需要查询的每个表创建 DbSet 对象?您收到什么错误消息?我认为您不能在这种情况下使用 dynamic ,因为 EF 在尝试在运行时对其进行评估时会将类型视为对象。
    • 它现在返回空值。我认为 List 可以从 DAL 层返回。然后,我将获取每个对象的属性值。
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    相关资源
    最近更新 更多