我System.Linq.Dynamic.Core用来动态地将lambda表达式添加到EF中的查询中.
我也希望能够按名称选择表格.我找到了这个答案:
但它不适用于asp.net core 2.0.我不能使用DbSet我必须使用DbSet<TEntity>它在错误消息中说.
我希望能够做到 db.GetTable("Namespace.MyTable").Where(...)
我怎样才能做到这一点?
TLDR; 当在编译时不知道表名时,如何使用Entity Framework从表中读取数据?
有一个外部系统处理大量信息,然后为每个批处理运行创建一个新表,并将一些数据存储在该表中.这些新表的列布局是事先已知的,因此我从现有数据库生成了一个ADO.NET实体数据模型(edmx文件),其中有一个表具有完全相同的列布局.
调用该数据库中的原始表ResultTableTemplate,因此也会调用表示该表的实体类ResultTableTemplate.
我试图弄清楚如何使用我的ADO.NET实体数据模型从那些动态创建的表中读取,然后回来IEnumerable<ResultTableTemplate>.到目前为止我所做的是:
public IEnumerable<ResultTableTemplate> GetResultsFromTable(string tableName) {
using (var context = new WorkdataEntities()) {
var table = context.CreateQuery<ResultTableTemplate>("SELECT " +
"ALL_THOSE_COLUMN_NAMES... " +
"FROM " + tableName;
var query = from item in table select item;
return query.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我收到System.Data.EntitySqlException以下消息:
无法在当前范围或上下文中解析"ResultTable419828".确保所有引用的变量都在范围内,加载了所需的模式,并正确引用了名称空间.近成员访问表达式,第1行,第225列.
ResultTable419828 是的价值 tableName
我试过tableName + " AS ResultTableTemplate"但它没有帮助.
有没有前进的方法,或者我必须在没有实体框架的帮助下做到这一点?
编辑:我现在意识到我写的查询文本并没有一直传递到底层SQL Server实例,而是由实体框架解释,它返回一个ObjectQuery<ResultTableTemplate>实例,因此它ResultTable419828在自动生成DbSet的Context实例中查找.
不过,有没有办法让我实现我需要做的事情?
编辑:谢谢Ladislav …