Breeze / OData:orderBy两个属性的“max”

时间:2017-07-19 07:34:59

标签: odata breeze

我不确定这是微风还是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-functions)

2 个答案:

答案 0 :(得分:0)

我首先考虑在数据被拉动时将数据列添加到数据中,这样您就可以将该列用于orderBy。对于故障排除来说也更清洁。

答案 1 :(得分:0)

参考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;
                    }
                });
        }

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