【问题标题】:Limit Number of Results being returned in a List from Linq限制从 Linq 列表中返回的结果数
【发布时间】:2012-06-08 15:40:08
【问题描述】:

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

有没有办法做到这一点?

我目前将它们作为List 传回,如果这有助于限制结果集。虽然我可以通过循环来限制这一点,直到我点击 X 我只是假设不传递额外的数据。

以防万一它是相关的...... 从 SQL Server 数据库运行的 C# MVC3 项目。

【问题讨论】:

  • 你要 linq "take(100)" 吗?

标签: c# asp.net-mvc-3 linq entity-framework


【解决方案1】:
results = results.OrderByDescending(x=>x.Date).Take(10);

OrderByDescending(...) 将根据您的日期/时间属性(或您想要用来获取最新的逻辑)对项目进行排序,Take(...) 将限制为前 x 个项目(首先是最新的,这要归功于订购)。

编辑:要返回一些不是从第一行开始的行,请使用Skip()

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

【讨论】:

  • 是否可以从某个索引开始获取结果?例如,一百个结果 - 从索引 50 开始,取 10 个结果,从 50 - 60?
  • @FrenkyB 请查看答案 - 我更新了它以解决您的后续问题。
【解决方案2】:

使用Take 函数

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

假设listOfItems 是您的实体对象列表,CreatedDate 是具有创建日期值的字段(此处用于按降序进行排序以获取最近的项目)。

Take() 函数返回从一个开始的指定数量的连续元素 顺序。

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

【讨论】:

  • “最近的结果” - 你的回答没有解决这个问题。
  • @Mr.TA:啊!我错过了那部分。现在更新了。感谢您指出。
  • 虽然我在最近的部分中并不需要帮助(我的问题措辞很糟糕),但我需要的是!谢谢!
  • 一旦等待选择答案计时器的愚蠢等待时间用完,我会选择你的答案...再次感谢
  • @Shyju nope 不让我这样做,说需要编辑答案。很奇怪。
【解决方案3】:

在转换为列表之前使用Take()。这样 EF 可以优化它创建的查询并只返回您需要的数据。

【讨论】:

  • 能否详细说明。也许举个例子?
  • @W.M.使用 Take first 将允许 EF 在 SQL 查询中进行分页。如果您先执行 ToList,则所有结果将从 SQL 中拉回,然后将在内存中进行分页。
  • @RedFilter 是唯一解决我问题的人。我有一组 31000 件物品……抓取整个列表似乎很浪费,只是为了让我可以将前 10 名从列表中拉出。但是,我不介意看一个例子:)
猜你喜欢
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多