Breeze / OData:两个属性的 orderBy "max"

Breeze / OData: orderBy "max" of two properties

我不确定这是轻而易举还是 OData 问题:我想使用 orderBy 但使用两个属性的 max

因此,例如,如果动物没有指定高度或高度小于动物类型的最小高度,则以下列表将错误地排序:

breeze.EntityQuery.from("Animal").orderBy("height, toAnimalType.minimalHeight", true);

我正在考虑以下范围内的内容:

breeze.EntityQuery.from("Animal").orderBy("max(height, toAnimalType.minimalHeight)", true);

我查看了 OData functions under chapter 4.5,但我认为这是错误的方式,因为 A) 没有 min/max 和 B) 这些是 $filter-函数(不是 orderBy 函数)

我会首先考虑在提取数据时将计算列添加到数据中,这样您就可以将该列用于 orderBy。故障排除也更加清晰。

参考约翰爸爸的模型工厂:

(function() {
    'use strict';
    var serviceId = 'model';
    angular.module('app').factory(serviceId, model);
    function model() {
        // revealing module pattern
        var entityNames = {
            client: 'Client',
            order: 'Order'

... other entity names 
        };

        var service = {
            configureMetadataStore: configureMetadataStore,
            entityNames: entityNames
        };

        return service;

        function configureMetadataStore(metadataStore) {          
            registerClient(metadataStore);
        };

        //#region Internal Methods       

        function registerClient(metadatastore) {
            metadatastore.registerEntityTypeCtor('Client', client);
            function client() {

       // add calculated 'display' property to client model
       // here is where you'd decide min or max

                Object.defineProperty(client.prototype, 'display', {
                    get: function() {
                        var cn = this.companyName;
                        var st = this.state;
                        return cn.padRight('.',60) + st;
                    }
                });
        }

已经有几年没有使用它了,因为我现在使用所有 ng4 和 Typescript,所以它可能有点粗糙,但可能会给你一个想法。推荐所有这些东西的 Pluralsight 课程。看看您是否可以在 github 上找到 Angular 的 John Papa's Hot Towel Spa 的示例代码。