Asp.Net Web API ODATA的GROUP BY / Case Insensitivity扩展?

时间:2017-09-20 10:38:17

标签: c# asp.net-web-api odata expression-trees odata-v4

无法在ODATA V4文档中按引用找到组。当我们在URL中通过查询传递组时,它只返回键,而不是实际的分组结果。

  

在Asp.Net ODATA中使用Group by的任何引用,关于可扩展性   ODATA Web API的要点。我们需要完全掌握方法   解析ODATA查询&转换为LILNQ到实体查询。

我正在讨论intercepting ODATA个查询行并执行手动定制,例如LINQ to Entities

  

我正在尝试为Case Sensitivity实现类似的扩展。   OData Case In-Sensitive filtering in Web API?

2 个答案:

答案 0 :(得分:0)

尝试从SQL角度进行处理:

  1. 通过分组,您可以准确地获取键和一些聚合值
  2. 通过使用用于组的原始过滤器并使用组键(原始过滤器和组键匹配)进行扩展,您实际上会加载给定组的数据。

这就是我们的分组网格在有角度的telerik剑道中的工作方式(它们具有很好的toOdataString隐含功能,我也对此进行了扩展:https://github.com/telerik/kendo-angular/issues/2102)。

这种方法可确保网格中的组数量固定(总组或第一级组)。

PRO:您看到所有组(或至少N个)

缺点:如果展开一个群组,则可能会携带太多物品;需要大量额外的代码和带有特殊odata查询的额外调用;

请参阅:http://www.reflection.sk/#portfolios,请检查屏幕快照:通用计划服务(UPS)软件包(.NET和KendoUI的Angular)

如果从用户界面的角度来看:

然后,分组不过是对分组字段进行优先排序的数据列表。这是默认的剑道分组网格方法。因此,他们只是对数据进行排序,获取其页面大小,然后添加分组的UX项目(网格中的虚拟项目)。

这种方法可确保您在网格中有固定的项目,但是当您折叠所有项目时,您可能只有1个甚至页面大小的组计数(取决于每个组是否/有多少个项目)。在这里查看:https://www.telerik.com/kendo-angular-ui/components/grid/grouping/-实际上,您需要关闭分页才能看到区别。

对于不超过固定数量的商品,此方法是最快的。每页只有一个呼叫,但是无法预先知道组的数量(如果将它们折叠起来,则可能只有1个甚至N个,其中N是页面大小)。

答案 1 :(得分:0)

关于区分大小写:

  1. 在将包装的列名和输入的值过滤到tolower()时有帮助:
  2. 但是由def来处理区分大小写取决于数据库设置。

另外请注意:通过分组,我无法使用odata执行类似$ groupby(tolower(columnname))的操作,所以...