希望通过使用实体框架
传递表名和多个列名来从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原语或枚举类型无效
答案 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();
}
}