我有一个asp.net mvc视图,它正在使用Telerik的网格。
Html.Telerik.Grid(Model.Items)
Model.Items是IQueryable,但网格要求我投射它:
例如:
Html.Telerik.Grid((IQueryable<Product>)Model.Items)
问题是:我不知道Model.Items中的类型是什么(它可以是IQueryable<Product>
,IQueryable<Book>
和许多其他类型。)
我还有Model.ItemsType,它可以包含以下值:typeof(IQueryable<Product>)
,typeof(IQueryable<Book>)
...
如果我事先不知道T的类型,怎样才能将IQueryable转换为IQueryable<T>
?
答案 0 :(得分:0)
需要在 编译时 中了解通用类型,而不是在 运行时 确定。< / p>
Model.Items
的类型是什么?如果它来自IEnumerable<T>
,那么假设您有System.Linq
的引用,那么您应该可以调用AsQueryable()
扩展方法。
答案 1 :(得分:0)
当你不提前知道T时,你将需要使用反射来调用Grid方法,因为在编译时无法做到这一点。如果Model.Items实际上是IQueryable,那么你不需要强制转换它;在基于反射的调用期间将其作为参数传递(无论如何都将所有参数作为类型对象)。
答案 2 :(得分:0)
也许您可以尝试绑定到IEnumerable。检查&#39; Binding to a collection of dynamic objects with MVC3 Razor&#39;代码库条目。