有這樣的LINQ查詢:我如何從10提取記錄到20
IEnumerable<Pack> pack = from Pack myPack in Packs
select myPack;
返回(例如)34條記錄。我只需要選擇從10到20的記錄。我該怎麼做?
有這樣的LINQ查詢:我如何從10提取記錄到20
IEnumerable<Pack> pack = from Pack myPack in Packs
select myPack;
返回(例如)34條記錄。我只需要選擇從10到20的記錄。我該怎麼做?
使用的Skip()
和Take()
組合:
pack.Skip(10).Take(10);
或者,如果你想有一個單獨的語句:
// if you want records 11 - 20 which would be the second set of 10
var packs = Packs.Skip(10).Take(10);
// or if you want records 10 - 20 which would be a set of 11
var packs = Packs.Skip(9).Take(11);
從技術上講,需要11-20。我假設他想要第二套10,如果是這樣的話,這個答案是正確的。 – Dismissile
怎麼樣以下?這個想法是將行號投影到每條記錄上。這樣你可以在where
條款中使用它。
var pack =
from x in Packs.Select((item, index) => new { RowNum = index + 1, Item = item })
where x.RowNum >= 10 && x.RowNum <= 20
select x.Item;
如果您正在使用LINQ to SQL或實體框架查詢數據庫,那麼你將很可能想要做你跳過/送對IQueryable的,而不是IEnumerable的操作。這樣,它將在數據庫中進行分頁,而不是檢索所有記錄,然後在客戶端上跳過/取出它們。只要確保首先執行OrderBy。 –
Dismissile