首页 > 解决方案 > 从反射类型实例化 IQueryable<>

问题描述

我有一个ClassName字符串。我创建了List对象的反射:

Type objectType = Type.GetType(ClassName);
var listObjectType = typeof(List<>);
var constructedListObjectType = listObjectType.MakeGenericType(objectType);
object listObject = Activator.CreateInstance(constructedListObjectType);

现在我listObjectIQueryable<ClassName>不是List<ClassName>

标签: c#

解决方案


不清楚你想做什么,但你要求了一些东西,你会得到你所要求的。

string className = "System.String";
Type type = Type.GetType(className);
var listType = typeof(List<>).MakeGenericType(type);

// This is a List<type> but it is easier to handle it through
// its non-generic IEnumerable interface
var list = (IEnumerable)Activator.CreateInstance(listType);

// Note that in truth this will return a IQueryable<type>
IQueryable queryable = Queryable.AsQueryable(list);

有两个重载Queryable.AsQueryable。一个需要 aIEnumerable<T>并返回对应IQueryable<>的 ,另一个需要 a IEnumerable,检查它实际上是 aIEnumerable<T>并返回 aIQueryable<T>向下转换为IQueryable。我正在使用第二个。


推荐阅读