【问题标题】:In ASP.NET Web API, how to send and receive a collection of records one by one在 ASP.NET Web API 中,如何逐个发送和接收记录集合
【发布时间】:2012-12-10 19:41:57
【问题描述】:

我正在使用实体框架、ASP.NET Web API,并且有一个 WinForm 客户端将其数据发送到服务器或接收。

我知道如何获取一条记录,也知道如何一次获取一组记录,但可能有很多记录可能会导致问题。 那么如何在客户端一个一个地获取新信息的集合呢?

我想我可以先获取新 ID 的列表,然后再逐一获取。有更好的方法吗?

任何有关实现此功能的信息都会很有用。

编辑:要清楚,我的意思是从客户端机器中的服务器而不是从数据库中的服务器获取信息集合:)

【问题讨论】:

  • 如有疑问,请咨询 Skeet 先生:stackoverflow.com/a/410050/534109
  • @TiesonT。这是一次从数据库中获取所有项目,而不是一次一个。
  • @Servy 我主要指的是 Jon 在他的回答中链接到的两个帖子,因为了解 yield 的实际工作原理是很好的第一步。但是,是的,该示例中的代码返回一个完整的集合。

标签: c# asp.net-mvc winforms entity-framework asp.net-web-api


【解决方案1】:

分页就是答案。下面是使用 Entity Framework 和 MVC 使用 Skip and Take 进行分页的一个很好的链接。您基本上指定起始索引(或“跳过”),然后指定要获取(或“获取”)的记录数。像这样:

context.YOURDBSET.Skip(0).Take(10);  //Gets the first 10.
context.YOURDBSET.Skip(10).Take(10);  //Gets the next 10.
context.YOURDBSET.Skip(20).Take(10);  //Gets the next 10.

等等等等。

这是链接:http://msdn.microsoft.com/en-us/magazine/gg650669.aspx

【讨论】:

  • 提及.Skip(...).Take(...) 的要点是仅选择页面所需的数据。
【解决方案2】:

解决这个问题的一个非常常见的方法是创建某种形式的分页。例如,第一次,只需从服务器获取前 50 条记录。然后根据某些条件(可能是用户触发,或根据时间自动,取决于您的应用程序)获取下一组数据,记录 51 - 100。

您可以通过触发获取各种数据页面的方式获得创意。例如,如果您需要以这种方式显示数据,您可以根据用户滚动鼠标滚轮触发数据检索。最终这取决于您的情况,但我相信分页是答案。

您的页面大小可以是 5 条记录,也可以是 500 条记录,但思路是一样的。

【讨论】:

  • 感谢 RickB。但是客户端不知道服务器上是否有新记录,服务器也不知道客户端有哪些记录?
  • 客户端需要做分页。来自客户端的第一个查询应该问“有多少条记录?”。然后根据该信息,它可以分页它需要的内容。如果您认为自第一个问题提出以来可能有新数据,请在一段时间后再次提出。
  • 如果您认为新记录将是一种常见情况,请将日期时间参数添加到您的分页 API。
猜你喜欢
  • 2014-05-10
  • 2018-12-23
  • 2016-03-01
  • 2017-09-26
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
相关资源
最近更新 更多