2011-07-26 26 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; 
相关问题