将OData参数($ filter,$ orderby,...)应用于List <t> </t>

时间:2014-10-08 11:43:30

标签: c# odata iqueryable

问题:

我有一个集合列表我需要通过OData参数过滤这个集合($ filter,$ orderby等)我能用什么来做我想做的事情?

产地:

SharePoint REST API具有阈值限制(5000项),当列表中有更多项时,将抛出异常。这就是为什么这不起作用的原因:

HOST/_vti_bin/listdata.svc/MyList?$filter=FieldName eq 'foo'&$orderby=OtherFIeld asc

我们可以获得所有项目,但我们不能使用这样的OData参数:

HOST/_vti_bin/listdata.svc/MyList

作为回应,我们将获得__next属性,我们可以在其中找到我们将用于下一页数据的网​​址,它将如下所示:

HOST/_vti_bin/listdata.svc/MyList?$skiptoken=4988

这就是我们如何获得所有物品。现在我需要将初始请求中的OData参数应用到我这边的过滤结果中。我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

answer开始,您可以执行以下操作:

public async Task<Object> GetMyList(ODataQueryOptions<MyObject> options = null)
{
    // Get your list from SharePoint
    List<MyObject> myObjects = GetMyObjectListFromSharePoint();

    // This will apply the OData query parameters 
    // to your IQueryable object but won't execute the query
    IQueryable query = options.ApplyTo(myObjects.AsQuerable());

    // This will execute the above query 
    // and return the new list of MyObject
    List<Object> result = await query.ToListAsync();

    // Do post result actions

    return result;
}