C# EF Core通过字符串获取DBSet,然后在查询中使用它
我正在尝试制作一个工具,使用户能够从ui中选择表/列。当用户将“查询配置对象”发布到服务器时,我想使用Entity Framework Core创建一个动态的SQL查询 范例 给定C# EF Core通过字符串获取DBSet,然后在查询中使用它,c#,entity-framework-core,ef-core-3.0,C#,Entity Framework Core,Ef Core 3.0,我正在尝试制作一个工具,使用户能够从ui中选择表/列。当用户将“查询配置对象”发布到服务器时,我想使用Entity Framework Core创建一个动态的SQL查询 范例 给定var tableName=“Table1” 我想抓取DbSet,然后运行类似 var dbSet = GetDbSet("Table1"); var stuff = await dbSet.Take(10).ToListAsync(); 我相信这在某种形式上是可能的,但我看到的所有文章在方法上都是相似的。一切都会编
var tableName=“Table1”代码>
我想抓取DbSet
,然后运行类似
var dbSet = GetDbSet("Table1");
var stuff = await dbSet.Take(10).ToListAsync();
我相信这在某种形式上是可能的,但我看到的所有文章在方法上都是相似的。一切都会编译,但当我运行它时,我得到的对象引用未设置为对象的实例
以下是我所拥有的:
var select = GetDbSet(tableName);
var results = await select.Take(10).ToListAsync();
GetDbSet方法:
这显然是可行的,但我需要对T
进行变量化(我不能这么做??)
这正是我所期待的:
private IQueryable GetDbSet(string name)
{
// forcing a type instead of fiddling with the string for simplicity
return _dbContext.Set(_dbContext.Table1.GetType());
}
但是,此代码不会编译:
var select = GetDbSet(tableName);
var results = await select.Take(10).ToListAsync();
“IQueryable”不包含“Take”和“no”的定义
可访问扩展方法“Take”接受类型为的第一个参数
可以找到“IQueryable”(您是否缺少using指令或
装配参考?)
我抓取一个DbSet
并使用它进行查询的路径是否正确?我是否需要为Take
和我想要使用的任何其他方法构建扩展方法?您是否有using System.Linq代码>?这就是Take
和其他一些扩展方法的来源。如果已经有了非泛型集合方法,为什么还要构建自己的非泛型集合方法?@Gleb没有。EF Core 3.0FWIW中只有一个设置:我在这个用例中放弃了EF。我找到了SqlKata(),它(目前)似乎更有能力构建动态查询,而且更易于使用。我感觉EF Core不想让你做这种事。
private IQueryable GetDbSet(string name)
{
// forcing a type instead of fiddling with the string for simplicity
return _dbContext.Set(_dbContext.Table1.GetType());
}
var select = GetDbSet(tableName);
var results = await select.Take(10).ToListAsync();