C# 动态地.Skip()和.Take()IQueryable<;匿名类型>;

C# 动态地.Skip()和.Take()IQueryable<;匿名类型>;,c#,casting,anonymous-types,C#,Casting,Anonymous Types,我有一个网格控件,它有一个数据源属性作为对象,现在我想将我的数据源强制转换为IQueryable,以便像下面的代码一样进行获取和跳过 var pagedData=((IQueryable)数据源).Skip(20).Take(10) 但我不知道如何将Object转换为IQueryable?另外,大多数时间类型的数据都是IQueryable为什么不使用a作为网格的源,让它为您完成工作呢 现在是正确定义类的时候了。当匿名类型在创建它们的方法中完全自包含时,它们就非常有用。当您说明需要在代码中的其他地

我有一个网格控件,它有一个
数据源
属性作为
对象
,现在我想将我的
数据源
强制转换为
IQueryable
,以便像下面的代码一样进行获取和跳过

var pagedData=((IQueryable)数据源).Skip(20).Take(10)

但我不知道如何将
Object
转换为
IQueryable
?另外,大多数时间类型的数据都是
IQueryable

为什么不使用a作为网格的源,让它为您完成工作呢


现在是正确定义类的时候了。当匿名类型在创建它们的方法中完全自包含时,它们就非常有用。当您说明需要在代码中的其他地方使用它们时,请通过类定义记录该类型,然后您可以在任何需要的地方使用该类,包括在强制转换中。创建类定义后,只要在需要的地方按名称引用该类即可

查询:

...
select new ClassName // name the class
{
    ...
}
方法返回类型

public IQueryable<ClassName> GetData()
public IQueryable GetData()
和演员

var data = (IQueryable<ClassName>)theDataSource;
var data=(IQueryable)数据源;

几乎肯定会有更好的方法来解决这个问题,但要回答您的问题,您可以使用
动态

private static IQueryable<T> GetInteriorElements<T>
                (IQueryable<T> source, int skip, int take)
{
    return source.Skip(skip).Take(take);
}
不幸的是,如果您使用的是.NET3.5,则必须使用反射

object DataSource = ...

// The real question is: what are you now going to do with this?
var pagedData = GetInteriorElements((dynamic)DataSource, 10, 20);