我有一个DataSource
属性为Object
的网格控件,现在我想将DataSource
投射到IQueryable<T>
以获取和跳过喜欢此代码
var pagedData = ((IQueryable<T>) DataSource).Skip(20).Take(10);
但我不知道如何将Object
投射到IQueryable<T>
?大部分时间类型的数据都是IQueryable<AnonymousType>
。
答案 0 :(得分:2)
几乎可以肯定有更好的方法来解决这个问题,但要按照要求回答您的问题,您可以使用dynamic
:
private static IQueryable<T> GetInteriorElements<T>
(IQueryable<T> source, int skip, int take)
{
return source.Skip(skip).Take(take);
}
并将其命名为:
object DataSource = ...
// The real question is: what are you now going to do with this?
var pagedData = GetInteriorElements((dynamic)DataSource, 10, 20);
如果您使用的是.NET 3.5,不幸的是,您将不得不使用反射。
答案 1 :(得分:1)
是时候正确定义一个班级了。当匿名类型在创建它们的方法中完全自包含时,它们就很棒。当您演示需要在代码中的其他地方使用它们时,通过类定义记录类型,然后您可以在任何需要的地方使用该类,包括在演员表中。创建类定义后,只需在需要的地方按名称引用类。
查询:
...
select new ClassName // name the class
{
...
}
方法返回类型
public IQueryable<ClassName> GetData()
并施展
var data = (IQueryable<ClassName>)theDataSource;
答案 2 :(得分:0)
为什么不使用PagedDataSource
作为网格的来源,让它为您完成工作?