【发布时间】:2017-05-24 20:58:14
【问题描述】:
是否可以将类型传递给 IQueryable 以在运行时实现。
喜欢,
//Get type at runtime
Type type = Type.GetType("fully qualified class name");
IQueryable<type> test = // <-returned object of this type
实际问题如下: 下面我能够获得具有特定类型的右侧对象,但这不是转换为查询变量的类型。我也会知道查询的类型。
Dictionary<string, Type> myDictionary = new Dictionary<string, Type>()
{
{ "tableName", typeof(tableName) }
};
//Below I am able to get right side object with specific type, but that is not casting to type of query variable. Also I will have known type for query.
IQueryable<Type> query= EFContext.Set(myDictionary[tableName]).AsQueryable();
稍后使用此查询对象通过动态传递 select/where 条件来选择数据。
var data = query.Select(x=> new
{
id= x.id,
name= x.name .. etc
}).ToList();
后面我需要使用这个测试变量来动态查询数据。
还请提出解决此方案的任何替代方案。
【问题讨论】:
-
不是这样的,不。您可以制作通用方法,但没有上下文就无法判断。
-
尝试这样做表明您的程序结构存在更大的问题。您在这里的最终目标是什么?
-
我认为可以,但是您的服务层变得非常复杂,因为您需要动态地将类型与存储库(表)进行映射。此外,处理导航属性变得非常复杂。
-
鉴于大多数 IQueryable 扩展方法都采用特定类型的表达式,因此尝试对可查询对象执行任何操作很快就会变得非常混乱。如果您只是想要一个可查询来返回数据库中的所有实体,这是可能的,但您可能不得不使用动态结果,这同样是混乱的。你要处理多少种类型?你能用另一种方式做吗,例如围绕你想要的类型使用 switch 语句?
-
@MrZander 感谢您的回复,添加了我遇到的问题的详细信息。
标签: c# .net entity-framework linq