我正在使用ASP.NET Web创建一个RESTful API。典型的控制器是使用LINQ对象从我的存储库中请求实体。我的存储库不使用实体框架,也不访问任何数据库。相反,它使用外部RESTFul服务进行数据访问。控制器使用Skip()和and ()来实现分页。
我想了解的部分是,在调用外部web服务时转换Skip()和将()作为请求参数是否有意义。换句话说:我有兴趣了解LINQ的Skip()和Take()是否可以用于对外部web服务的调用应用分页,而不是在包含所有对象的结果IEnumerable上应用分页。
这是一个典型的LINQ语句,用于从我自己的存储库中检索数据。
var userRoles = from userRole in Repository.UserRole.Load()
.Skip(10)
.Take (10)
select ModelFactory.Create(userRole);
我的存储库将从外部web服务请求数据,如下所示:
protected override IEnumerable<UserRole> LoadAll()
{
//....
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(GetUrl());
string parameters =
String.Format("?sessionkey={0}&take={1}&skip={2}", take, skip, Session);
HttpResponseMessage response = client.GetAsync(parameters).Result;
//....skipped. deseralize response using JsonConvert and return IEnumerable<UserRole>
}
使用LINQ查询并将其转换为web请求的获取和跳过参数是可能和合理的,还是应该将普通的跳转&取整数参数传递给LoadAll()方法?
发布于 2015-03-13 16:40:37
只需将take
和skip
值传递到LoadAll()
方法中(或者我的首选是使用page
和pageSize
值并将它们转换为take
和skip
)。
虽然很可能会想出一些LINQ提供程序,允许提取所使用的Take
和Skip
,并以某种方式将它们路由到您的系统中,但这比它所能提供的任何好处都要复杂得多。
如果您担心显式的take
和skip
参数暴露了存储库的实现细节,那么就更有理由使用page
和pageSize
,并在幕后将它们转换为take
和skip
。我想说的是,这不会暴露您的存储库是如何分页的。
https://stackoverflow.com/questions/29037460
复制相似问题