最初の10個のレコードを選択するには、次に10個、次に10個、次に10個を選択します。最初の10個のレコードを選択し、次の10個のページングをLinqを使用して呼び出します。
Phrases = bannersPhrases.Select(x=>x.Phrase).Take(10).ToArray()
次の10レコードはどのように取得されますか?
最初の10個のレコードを選択するには、次に10個、次に10個、次に10個を選択します。最初の10個のレコードを選択し、次の10個のページングをLinqを使用して呼び出します。
Phrases = bannersPhrases.Select(x=>x.Phrase).Take(10).ToArray()
次の10レコードはどのように取得されますか?
var total = bannersPhrases.Select(p => p.Phrase).Count();
var pageSize = 10; // set your page size, which is number of records per page
var page = 1; // set current page number, must be >= 1
var skip = pageSize * (page-1);
var canPage = skip < total;
if (canPage) // do what you wish if you can page no further
return;
Phrases = bannersPhrases.Select(p => p.Phrase)
.Skip(skip)
.Take(pageSize)
.ToArray();
あなたは、次の10の項目を返します.Skip()
.Thisを使用することができます:あなたが使用することができます
Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray()
をSkip拡張方法あなたがページングをやっているし、あなただけしたい場合は
Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray()
特定のページにスキップすると、Skip
とTake
が他の回答のいくつかで説明されているように使用できます。ただし、シーケンス全体を特定のサイズのチャンクにグループ化する場合は、代わりにGroupBy
を使用できます。
var groupSize = 4;
// The characters 'a' - 'z'.
var source = Enumerable.Range(0, 26).Select(i => (Char) ('a' + i));
var groups = source
.Select((x, i) => new { Item = x, Index = i })
.GroupBy(x => x.Index/groupSize, x => x.Item);
foreach (var group in groups)
Console.WriteLine("{0}: {1}", group.Key, String.Join(", ", group));
出力は次のとおりです:ここで小さな例です
0: a, b, c, d 1: e, f, g, h 2: i, j, k, l 3: m, n, o, p 4: q, r, s, t 5: u, v, w, x 6: y, z
linqクエリの仕組みを教えてください。私はいつもSelectクエリのコレクション要素にしかアクセスできないと思っていました。ここでコレクション要素と想像上のiにアクセスできますが、どこから来たのか分かりません。 –
@ParthShah:これは「想像上の私」ではありません。ソースシーケンス内の要素のインデックスです。私が使用しているオーバーロードは[MSDNで文書化されています](http://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).ASPX)です。ソースシーケンスを、私がグループ化するために使用するインデックスを組み込んだシーケンスに投影します。 –
それを想像して申し訳ありません。うわー、それはクールなクエリです!あなたは私の投票を得ました! –
+1これは、実際にページを選択した唯一の答え、残りの部分だけを選択項目11-20 ;-) –
もしあるかなり一定bannersPhrasesは 'IQueryable'で残りのコメントは無視します。自宅でこれをしないでください! 'Enumerable.Skip'はO(n)です! :-)(あなたが私を信頼していないなら、IlSpy/Reflectorを通して見てみてください)。私はあなたがバナーをキャッシングしていないことに気付くでしょう。私はbannersPhrasesが固定コレクションであることを願っています。なぜなら、IEnumerableでもあまりにも大きければ、すべてのページに対して再生されるからです。 – xanatos