5

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

在 ODATA Web API 的扩展点上使用 Asp.Net ODATA 中的 Group by 的任何参考。我们需要全面掌握如何解析 ODATA 查询并将其转换为 LILNQ 到实体查询。

我说的是拦截 ODATA 查询和执行手动自定义,例如 LINQ to Entities

我正在尝试为区分大小写实现类似的扩展。 Web API中的OData大小写敏感过滤?

4

2 回答 2

0

尝试从 SQL 的角度来处理它:

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

这就是我们的分组网格在 angular telerik kendo 中的工作方式(他们有一个很好的 toOdataString impl。我也扩展了它:https ://github.com/telerik/kendo-angular/issues/2102 )。

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

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

缺点:如果你展开一个组,你可能会得到太多的项目;需要大量额外的代码和特殊的 odata 查询的额外调用;

请参阅:http ://www.reflection.sk/#portfolios ,查看屏幕截图:Universal Plans Services (UPS) Software Bundle (.NET & Angular with KendoUI)

如果从 UI 的角度来看:

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

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

对于固定计数的项目,这种方法是最快的。每页只有一个调用,但事先不知道组的数量(如果折叠它们,它可能只有 1 甚至 N,其中 N 是页面大小)。

于 2019-12-20T20:39:16.787 回答
0

关于区分大小写:

  1. 过滤包装列名称并将值输入 tolower() 时有帮助:
  2. 但是,def 如何处理区分大小写取决于数据库设置。

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

于 2019-12-20T20:41:09.847 回答