首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EntitySetController进行自定义分页

问如何使用EntitySetController进行自定义分页
EN

Stack Overflow用户
提问于 2013-05-08 00:20:02
回答 1查看 454关注 0票数 0

我正在尝试使用EntitySetController实现自定义分页。

代码语言:javascript
复制
public class MyController : EntitySetController<Poco, int>
{
    public IQueryable<Poco> Get()
    {
        var result = _myBusinessLogic.Search(QueryOptions.Top.Value);
        return result.AsQueryable()
    }
 }

我想我遗漏了一些东西,因为看起来控制器试图对已经只返回一页的Search方法的结果应用分页。我怎样才能阻止它这样做并自己应用分页呢?

看起来我可以直接从ODataController继承并实现:

代码语言:javascript
复制
public IEnumerable<Poco> Get(ODataQueryOptions odataQueryOptions)

但我想知道我是否可以继续使用EntitySetController,这样可以减少要编写的管道代码。

我想坚持使用OData格式,而不返回PageResult<>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-08 02:24:27

您只能使用ODataQueryOptions完全控制查询,或者使用QueryableAttribute让框架完全为您处理查询。不幸的是,没有中间立场。

所以,我认为现在做一个ODataController是解决这个问题的正确方法。

也就是说,我可以建议一个暂时可行的肮脏的变通方法。请注意,这依赖于可能/将会改变和破坏您的内部实现。

代码语言:javascript
复制
public class MyController : EntitySetController<Poco, int>
{
    public IQueryable<Poco> Get()
    {
        var result = _myBusinessLogic.Search(QueryOptions.Top.Value);
        RemoveQueryString(Request, "$top");
        return result.AsQueryable()
    }    

    // This method relies that code that looks for query strings uses the extension
    // method Request.GetQueryNameValuePairs that relies on cached implementation to 
    // not parse request uri again and again.
    public static void RemoveQueryString(HttpRequestMessage request, string name)
    {
        request.Properties[HttpPropertyKeys.RequestQueryNameValuePairsKey] = request.GetQueryNameValuePairs().Where(kvp => kvp.Key != name);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16423922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档