如何選擇前10條記錄,然後是下10條,然後是下10條,只要數組不會結束。選擇前10條記錄,接下來10條,使用Linq尋呼
Phrases = bannersPhrases.Select(x=>x.Phrase).Take(10).ToArray()
如何獲得下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();
您可以使用.Skip()
。這將返回接下來的10個項目:
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查詢中的collection元素。在這裏,您可以訪問收藏元素和虛構的i,我不明白它來自哪裏。 – 2014-09-11 11:02:45
@ParthShah:這不是一個「虛構的我」。它是源序列中元素的索引。我正在使用的重載[記錄在MSDN](http://msdn.microsoft.com/en-us/library/bb534869(v = vs.110).ASPX)。我將源序列投影到一個序列中,該序列包含我用來分組的序號。 – 2014-09-11 11:19:24
對不起,它叫虛。哇,這是一個很酷的查詢!你先生贏得了我的投票! – 2014-09-11 11:38:00
+1相當肯定這是實際選擇頁面的唯一答案,剩下的只是選擇項目11-20 ;-) – 2012-03-15 10:51:08
如果bannersPhrases是一個'IQueryable',忽略了其餘的評論。請不要在家裏這樣做! 'Enumerable.Skip'是O(n)! :-)(如果你不信任我,請嘗試通過IlSpy/Reflector查看它)。我甚至會注意到你沒有緩存橫幅短語。我希望bannerPhrases是一個固定的集合,因爲如果它太'IEnumerable',那麼它將被重新生成每個頁面。 – xanatos 2012-03-15 11:01:29