X是一个变量,但在尝试转换时像使用一样一个字符串。我希望DbSet返回并返回IQueryable。问题是我在做什么(DbSet)并收到以下错误:tableEntity是一个变量,但在尝试转换时像类型一样使用。有没有办法来解决这个问题?publicobjectGetList(stringtableEntity){TypetableEntity=Type.GetType("TestProject."+typeName+",TestProject");vardbObject=(DbSet)typeof(DbContext).GetMethod("Set",Type.EmptyTypes)。MakeGenericMethod(tableEntity).Invoke(databaseContext,null);返回dbObject.AsQueryable();编辑只是为了补充一点,我无权访问我们通过字符串传递名称的类型。事实证明,实体类型在编译时实际上是未知的或可知的。它必须是一个字符串。在编译时唯一使用该类型的地方是在转换为(DbSet)时。好吧,你可能不需要那个。您需要从该类型调用AsQueryable(),它是IEnumerable的扩展方法,具有泛型和非泛型版本。如果我们通过非泛型IEnumerable调用它,那就是非泛型AsQueryable(),它返回一个非泛型IQueryable。但无论如何我们都会返回对象,所以嘿。为了使这个东西有用,必须对它做相当多的反射,所以声明的类型可能并不那么重要。看看这是否有效:publicobjectGetList(stringtableEntity){TypetableEntity=Type.GetType("TestProject."+typeName+",TestProject");vardbObject=(System.Collections.IEnumerable)typeof(DbContext).GetMethod("Set",Type.EmptyTypes).MakeGenericMethod(tableEntity).Invoke(databaseContext,null);返回dbObject.AsQueryable();如果事实证明您需要通用IQueryable,我们将不得不使用反射,因为未知(在编译期间)实体类型获取AsQueryableMethodInfo并在其上调用MakeGenericMethod(tableEntity)。第一次尝试:在该语言中,泛型的类型参数必须是实际类型,而不是Type类的实例。那是因为它们是在编译时解析的。但这没问题;要将类型参数传递给泛型方法,只需编写带有类型参数的泛型方法。你不能这样做:varstuff=GetList("MyTableEntityClass");但这也很好:varstuff=GetList();...publicobjectGetList(){vardbObject=(DbSet)typeof(DbContext).GetMethod("Set",Type.EmptyTypes).MakeGenericMethod(typeof(TTableEntity)).Invoke(databaseContext,null);返回dbObject.AsQueryable();反射是不同的;这是我们将typeof(TTableEntity)传递给MakeGenericMethod()的地方。一旦我们使用编译器可以检查的实际类型,我们还可以更好地处理返回类型:publicIQueryableGetList(){vardbObject=(DbSet)typeof(DbContext).GetMethod("Set",Type.EmptyTypes)。MakeGenericMethod(typeof(TTableEntity)).Invoke(databaseContext,null);返回dbObject.AsQueryable();既然,正如Ed所说,您在编译时不使用表实体类型,为什么不使用非泛型databaseContext.Set(tableEntity).AsQueryable()?但是如果你对Set有信心,试试这个:以上是C#学习教程:X是一个变量,但是在尝试转换时,使用类似于共享的东西,如果它对你有用并且需要知道更多C#学习教程,希望大家多多关注—publicobjectGetList(stringtableEntity){TypetableEntity=Type.GetType("TestProject."+typeName+",TestProject");返回GetType().GetMethod("GetListHelper").MakeGenericMethod(tableEntity).Invoke(this);}publicobjectGetListHelper()whereT:class{vardbObject=databaseContext.Set(null);返回dbObject.AsQueryable();}本文收集自网络,不代表立场,如有侵权请点右联系管理员删除。如需转载请注明出处:
