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)を試しました。パラメータの種類を、IQueryableではなくINumerableにすることをお勧めします。この場合、すべてのデータを選択するための解決策は何ですか?

ありがとう

4

3 に答える 3

4

次のように簡単に実行できます。

public PagedList(IEnumerable<T> source) 
{ 
    this.AddRange(source);
}
  • IEnumerable<T>IQueryable<T>に固有の機能を使用しないため、の代わりにパラメータ タイプとしてIQueryable<T>
  • いいえAsQueryable、単にすべてのデータが必要なためです
  • 内部で既にコピーを実行しているため、ToListいいえ。List<T>.AddRange2ToListつのコピー操作が行われます。
于 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 はどちらも問題ありません。実際に必要なものだけに依存します。

より良いケースについては、これを読むことができます。

IQueryable<T> と IEnumerable<T> の違いは何ですか?

于 2012-08-16T09:00:53.367 に答える