Breeze/OData:orderBy“;“最大值”;有两个属性

Breeze/OData:orderBy“;“最大值”;有两个属性,odata,breeze,Odata,Breeze,我不确定这是一个简单的问题还是一个OData问题:我想使用orderBy,但使用两个属性的max 因此,例如,如果动物没有指定高度或高度小于动物类型的最小高度,则以下内容将对列表进行错误排序: breeze.EntityQuery.from("Animal").orderBy("height, toAnimalType.minimalHeight", true); 我想到的是: breeze.EntityQuery.from("Animal").orderBy("max(height, toA

我不确定这是一个简单的问题还是一个OData问题:我想使用
orderBy
,但使用两个属性的max

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

breeze.EntityQuery.from("Animal").orderBy("height, toAnimalType.minimalHeight", true);
我想到的是:

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

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

我首先考虑在数据被提取时向数据添加一个计算列,这样您就可以将该列用于orderBy。故障排除时也更干净。

参考John Papa的模型工厂:

(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上John Papa的Angular热毛巾Spa的示例代码

这个建议是有效的,但不幸的是,我所处的平台环境不允许我在数据库中创建新列。我只能配置查询。我希望从客户端完成这项工作,而不必涉及数据库管理员和更改模型。这是Angular 2+?如果您使用的是clientside类型脚本模型,那么可以在那里计算属性(请参阅Ideablade中的temphire示例),然后进行排序。如果在Angular.js中,我认为您仍然可以在元数据存储的模型工厂中执行类似的操作。John Papa在他的Spa框架中有这样的例子。。(但我想他也在公共场合的某个地方说了出来)这是个好主意。我想我将不得不求助于此,因为我无法告诉Breeze/OData/EF/SQL以我想要的方式进行排序。我希望我不需要对客户做任何工作,只需要按照我需要的方式对结果进行排序。我还可以检查生成的数组并“手动”排序。仅供参考:这是有角度的JS。