.net 对于OData查询,$filter是否保证在$skip之前执行?

.net 对于OData查询,$filter是否保证在$skip之前执行?,.net,asp.net-web-api,expression,odata,.net,Asp.net Web Api,Expression,Odata,我在中找不到关于在$skip操作之前是否始终应用$filter操作的说明。显然,在实现一致的页面检索算法时这样做是有意义的 我担心的是表达式树不会施加这样的约束。例如,以下两个查询通常会产生不同的结果 IQueryable<string> query = (new[] { "aaa", "eee", "bbbb", "cccc", "dddd" }).AsQueryable(); query.Where(arg => arg.Length > 3).Skip(1); q

我在中找不到关于在
$skip
操作之前是否始终应用
$filter
操作的说明。显然,在实现一致的页面检索算法时这样做是有意义的

我担心的是表达式树不会施加这样的约束。例如,以下两个查询通常会产生不同的结果

IQueryable<string> query = (new[] { "aaa", "eee", "bbbb", "cccc", "dddd" }).AsQueryable();

query.Where(arg => arg.Length > 3).Skip(1);
query.Skip(1).Where(arg => arg.Length > 3);
IQueryable查询=(新的[]{“aaa”、“eee”、“bbbb”、“cccc”、“dddd”});
query.Where(arg=>arg.Length>3)。跳过(1);
query.Skip(1).Where(arg=>arg.Length>3);
我已经对OData的ASP.NET Web API RC实现进行了一些简单的测试,它确实在
$skip
之前应用了
$filter
,而不管操作符出现在查询字符串中的什么位置。但是,一般来说这是真的吗?

MS-ODATA(ODATA的OSP规范):对存在多个查询选项的数据服务URI进行评估时,必须将查询选项应用于URI的资源路径部分标识的资源,顺序如下:$format、$inlinecount、$filter、$orderby、$skiptoken、$skip、$top、,$expand

我认为规范中实际上有一两个bug(应该在下一次规范更新中解决)——我添加了这样的评论:$inlinecount如何在$filter之前有效,以及$filter/$orderby如何在$expand之前有效

无论如何,您可以假设规范确实对系统查询选项进行了排序,并且它当前是规范中的一个必备项,因此任何声称支持OData的服务器都应该在$skip或$top之前对$filter进行一致的评估。

当前的规范已更改。现在是$filter、$inlinecount、$orderby、$skiptoken、$skip、$top、$expand、$select、$format