如何通过在Asp.net MVC5中动态传递多个列名来获取记录

时间:2017-06-17 07:05:42

标签: sql-server asp.net-mvc entity-framework

希望通过使用实体框架

传递表名和多个列名来从db获取记录

到目前为止我已经尝试过......

 public List<string> GetRecords(List<string> Columns,string tablename)
    {
        using (var Context = new MCPEntities())
        {
             string columnnames = string.Join(",", Columns);
            var Records = Context.Database.SqlQuery<string>("SELECT " + columnnames + " FROM " + tablename + " ").ToList();
            return Records.ToList();
        }
    }

我得到的错误

  

数据阅读器有多个字段。多个字段对EDM原语或枚举类型无效

2 个答案:

答案 0 :(得分:1)

<强>尝试

var res = dbContext.Database.SqlQuery<TestEntity>("Select * from dbo.MyView").ToList();

用这个再试一次......

var res = dbContext.Database.SqlQuery("Select * from dbo.MyView").ToList<TestEntity>();

如果仍然不起作用,那么你需要检查你的

TestEntity 和你的

dbo.MyView 对于相同的列。因为如果MyView和TestEntity中有不同的列,那么它将无效...

如果你在查询中更改了列名,那么它会抛出一个异常,否则它将无法正常工作......

如果这对你有所帮助,那就不要忘记标记......

答案 1 :(得分:0)

你已经给它应该工作,你得到了什么错误。

根据我的建议,首先将查询放在单独的变量中,然后使用Visual Studio中的断点检查查询是否已正确形成,然后传递该查询以执行。它肯定会奏效。

示例:

public List<string> GetRecords(List<string> Columns,string tablename)
{
    using (var Context = new MCPEntities())
    {
         string columnnames = string.Join(",", Columns);

        //check the below line in breakpoint to see the query formation
        string formedquery = "SELECT " +   columnnames + " FROM " + tablename + ""

     var Records = Context.Database.SqlQuery<string>(formedquery).ToList();
        return Records.ToList();
    }
}