【问题标题】:How to find out which records have been filtered out by Queryable attribute?如何找出哪些记录已被 Queryable 属性过滤掉?
【发布时间】:2013-07-24 17:12:34
【问题描述】:

我有一个启用了 odata 查询选项的 asp.net web api 控制器。控制器如下:

[Queryable(PageSize = 10)]
public IQueryable<MyDTO> Get(string Id)
{
  //some code here
}

Queryable 属性可以明显看出,如果MyDTO's 超过10 条,则此控制器一次总是返回10 条记录。

如何知道哪些10条记录已经返回或者哪些记录被odata查询选项过滤掉了?

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api odata


    【解决方案1】:
    public IQueryable<MyDTO> Get(string Id, ODataQueryOptions<MyDTO> queryOptions)
        {
            IQueryable<MyDTO> allMyDTOs = GetMyDTOs(Id);
            ODataQuerySettings settings = new ODataQuerySettings() { PageSize = 10 };
            IQueryable<MyDTO> appliedMyDTOs = queryOptions.ApplyTo(allMyDTOs, settings) as IQueryable<MyDTO>;
            return appliedMyDTOs;
        }
    

    这里有一些示例。

    http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

    【讨论】:

      【解决方案2】:

      所有 pageSize 所做的只是在首先应用传入的 $filter、$orderby、$skip、$top 之后返回的可查询操作上执行 Take。如果要对应用查询后返回的项目进行后处理,可以将ODataQueryOptions&lt;MyDTO&gt;作为输入,手动应用到IQueryable

      【讨论】:

      • 谢谢,你能分享一个ODataQueryOptions的用法示例吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多