1

如果始终在操作之前应用操作,我在OData 协议文档中找不到提及。显然,在实现一致的页面检索算法时这样做是有意义的。$filter$skip

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

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);

我已经对 OData 的 ASP.NET Web API RC 实现进行了一些简单的测试,它确实适用于$filterbefore $skip,无论运算符出现在查询字符串中的什么位置。但总的来说这是真的吗?

4

1 回答 1

2

MS-ODATA(OData 的 OSP 规范)声明:必须评估存在多个查询选项的数据服务 URI,就好像查询选项应用于 URI 的资源路径部分标识的资源一样,在以下顺序:$format、$inlinecount、$filter、$orderby、$skiptoken、$skip、$top、$expand。

我认为规范中实际上有一两个错误(应该在下一个规范更新中解决) - 我添加了这条评论:$inlinecount 如何在 $filter 之前生效,以及 $filter/$orderby 如何在 $ 之前生效扩张?

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

于 2012-09-21T16:44:55.920 回答