IQueryable选择所有?

时间:2012-08-16 08:55:14

标签: c# asp.net visual-studio-2010 linq

我有这个方法,它选择特定范围内的数据(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。在这种情况下,选择所有数据的解决方案是什么?

由于

3 个答案:

答案 0 :(得分:4)

你可以这样做:

public PagedList(IEnumerable<T> source) 
{ 
    this.AddRange(source);
}
  • IEnumerable<T>作为参数类型而非IQueryable<T>,因为您不使用特定于IQueryable<T>的任何功能。
  • 没有AsQueryable,因为您只想要所有数据
  • 没有ToListList<T>.AddRange内部已经执行了副本。使用ToList时,将会进行两次复制操作。

答案 1 :(得分:0)

出了什么问题:

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

制作一些可查询的东西然后使它成为一个列表似乎很奇怪。特别是考虑到源已经是可查询的。

答案 2 :(得分:0)

IEnumerable和IQueryable都很好,它只取决于你真正需要的东西。为了更好的案例研究,你可以阅读它。

What is the difference between IQueryable<T> and IEnumerable<T>?

相关问题