限制从 Linq 返回的列表中的结果数

我使用 Linq/EF4.1从数据库中提取一些结果,希望将结果限制为(X)最新的结果。其中 X 是用户设置的数字。

有办法吗?

如果这有助于限制结果集,那么我现在将它们作为 List传递回去。虽然我可以通过循环来限制这一点,但是我只是假设不传递额外的数据。

以防万一。 从 SQLServer 数据库运行的 C # MVC3项目。

126602 次浏览

Use the Take function

int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)

Assuming listOfItems is List of your entity objects and CreatedDate is a field which has the date created value (used here to do the Order by descending to get recent items).

Take() Function returns a specified number of contiguous elements from the start of a sequence.

http://msdn.microsoft.com/en-us/library/bb503062.aspx

results = results.OrderByDescending(x=>x.Date).Take(10);

The OrderByDescending(...) will sort items by your date/time property (or w/e logic you want to use to get most recent) and Take(...) will limit to first x items (first being most recent, thanks to the ordering).

Edit: To return some rows not starting at the first row, use Skip():

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);

Use Take(), before converting to a List. This way EF can optimize the query it creates and only return the data you need.