想要通过使用实体框架传递表名和多个列名来从数据库获取记录
到目前为止我已经尝试过...
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 基元或枚举类型无效
尝试
var res = dbContext.Database.SqlQuery<TestEntity>("Select * from dbo.MyView").ToList();
有了这个,再试一次...
var res = dbContext.Database.SqlQuery("Select * from dbo.MyView").ToList<TestEntity>();
如果仍然不起作用,那么您需要检查您的
测试实体和你的
德博。我的视图对于相同的列。因为如果MyView和TestEntity中有不同的列,那么它将不起作用...
如果您在查询中更改列名,那么它将引发异常或无法正常工作......
如果这对您有帮助,那么不要忘记标记...
通过你给出的它应该工作,你得到什么错误。
正如我的建议,首先将查询放在单独的变量中,然后使用 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();
}
}