有这样的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