2017-07-19 41 views
0

我不確定這是一件輕而易舉的事情還是一個OData問題:我想使用orderBy,但使用兩個屬性的max微風/ OData:orderBy「最大」的兩個屬性

因此,例如下面將列表排序錯誤如果動物沒有指定的高度或高度比動物類型的最小高度較小:

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 -functions(不排序依據函數)

回答

0

在談到約翰爸爸的模範工廠:

(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和打字稿現在所以它可能是一個有點粗糙,但可以給你一個想法。推薦所有這些東西的Pluralsight課程。看看你能否在github上找到John Papa的Hot Towel Spa for Angular的示例代碼。

+0

這是一個好主意。我想我將不得不求助於此,因爲我無法告訴Breeze/OData/EF/SQL以我想要的方式排序。我希望我不需要在客戶端做任何工作,只需按照我需要的方式將結果排序即可。我也可以通過結果數組進行「手動」排序。 **供參考:**這是Angular JS。 – NoRyb

0

我會先看看在拉數據時向數據添加一個計算列,以便您可以將該列用於orderBy。對於故障排除也很乾淨。

+0

該建議是有效的,但不幸的是我在一個平臺的環境,不允許我在數據庫中創建新的列。我只能配置查詢。我希望能夠從客戶端做到這一點,而不必涉及db-admins和更改模型。 – NoRyb

+0

這是Angular 2+嗎?如果您使用客戶端打字稿模型,您可以在那裏計算屬性(參見Ideablade的temphire示例),然後進行排序。如果在Angular.js中,我認爲你仍然可以在你的元數據存儲上的模型工廠中做類似的事情。 John Papa在他的Spa框架中有這樣的例子..(Pluralsight,但是認爲他在公共場合也有) –