如果我事先不知道T,如何将IQueryable转换为IQueryable <t>?</t>

时间:2010-11-25 19:04:11

标签: asp.net-mvc c#-4.0 telerik

我有一个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>

3 个答案:

答案 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;代码库条目。