0

我有这个方法,它选择特定范围内的数据(pageIndex 和 pageSize)

public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
    {            
        this.AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());
    }

我想创建一个选择所有数据的重载方法,所以,这是我的代码

public PagedList(IQueryable<T> source)
    {
       //this.AddRange(source.Select(x => new T()).ToList()); (1)
        this.AddRange(source.AsQueryable().ToList()); (2)
    }

首先,我尝试了(1),但它不接受 T。然后我尝试了(2),建议我应该将参数类型设为 INumerable 而不是 IQueryable。在这种情况下选择所有数据的解决方案是什么?

谢谢

4

3 回答 3

4

你可以像这样简单地做到这一点:

public PagedList(IEnumerable<T> source) 
{ 
    this.AddRange(source);
}
  • IEnumerable<T>作为参数类型而不是IQueryable<T>,因为您不使用任何特定于IQueryable<T>.
  • AsQueryable,因为您只想要所有数据
  • ToList,因为List<T>.AddRange内部已经执行了副本。将ToList进行两次复制操作。
于 2012-08-16T08:58:58.157 回答
0

会有什么问题:

public PagedList(IQueryable<T> source)
{
    this.AddRange(source.ToList());
}

使某些东西可查询,然后使其成为列表似乎很奇怪。特别是考虑到源已经是可查询的。

于 2012-08-16T08:59:25.360 回答
0

IEnumerable 和 IQueryable 都很好,它只取决于你实际需要什么。

为了更好的案例 sudy,您可以阅读此内容。

IQueryable<T> 和 IEnumerable<T> 有什么区别?

于 2012-08-16T09:00:53.367 回答