动态地.skip()和.take () iqueryableanonymoustype>

本文关键字:iqueryableanonymoustype take 动态 skip | 更新日期: 2023-09-27 18:16:23

我有一个网格控件,有一个DataSource属性作为Object,现在我想把我的DataSource转换为IQueryable<T>,然后跳过,像这样的代码

var pagedData = ((IQueryable<T>) DataSource).Skip(20).Take(10);

但是我不知道如何将Object转换为IQueryable<T> ?而且大部分时间的数据类型是IQueryable<AnonymousType>

动态地.skip()和.take () iqueryableanonymoustype>

几乎肯定会有更好的方法来处理这个问题,但要回答您的问题,您可以使用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上,你将不得不使用反射,不幸的是

是时候正确定义一个类了。当匿名类型在创建它们的方法中完全自包含时,它们是很棒的。当您演示需要在代码的其他地方使用它们时,通过类定义记录类型,然后您可以在需要的任何地方使用类,包括在强制转换中。一旦创建了类定义,只需在需要的地方按名称引用该类。

查询:

...
select new ClassName // name the class
{
    ...
}

方法返回类型

public IQueryable<ClassName> GetData()

和cast

var data = (IQueryable<ClassName>)theDataSource;

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

使用PagedDataSource类分页- CodeProject

相关文章:
  • 没有找到相关文章