2011-07-26 27 views
2

有這樣的LINQ查詢:我如何從10提取記錄到20

IEnumerable<Pack> pack = from Pack myPack in Packs 
         select myPack; 

返回(例如)34條記錄。我只需要選擇從10到20的記錄。我該怎麼做?

+0

如果您正在使用LINQ to SQL或實體框架查詢數據庫,那麼你將很可能想要做你跳過/送對IQueryable的,而不是IEnumerable的操作。這樣,它將在數據庫中進行分頁,而不是檢索所有記錄,然後在客戶端上跳過/取出它們。只要確保首先執行OrderBy。 – Dismissile

回答

12

使用的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); 
+1

從技術上講,需要11-20。我假設他想要第二套10,如果是這樣的話,這個答案是正確的。 – Dismissile

1

怎麼樣以下?這個想法是將行號投影到每條記錄上。這樣你可以在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; 
相關問題