2013-05-06 3 views
5

アイテム数を返す複雑なクエリがあります。クライアント上でクエリを実行すると、常にオブジェクトが返されますか、またはペイロードにオブジェクト配列を送信せずに項目数を返す方法がありますか?Breeze.jsでカウントされる

var query = breeze.EntityQuery.from('Items').inlineCount(true); 

のようなことをやってみましたが、まだすべてのレコードをプルダウンしています。どんな解決策ですか?

+0

すべてのオブジェクトをロードしてから、カウントするか、単にデータベース内のオブジェクトの数を取得しようとしていますか? –

+0

いいえ、ちょうどカウント。 –

答えて

8

あなたの質問に正確に答えるかどうかは分かりませんが、レコードの数を知るためには、レコードを照会する必要があります(私の知る限り、Breezeを直接私の頭の上の方法であるSQLコマンド)ので、あなたのような何かができる - これは何のオブジェクトを返さないし、単に数になるだろう -

var query = breeze.EntityQuery.from('Items') 
    .take(0) 
    .inlineCount(true); 

答えを編集。

+0

興味深いアプローチで、少しハックを感じている間は、少なくとも100アイテムをつかむよりはるかに優れています。 @Wardがこれについて何を言わなければならないのだろうか。 –

+0

問題を明確にするために:私はアイテムの数を取得しようとしています。アイテムには、3種類のサブアイテム(A、B、C)があります。 Item1(A:4、B:10、C:2)Item2(例:A:4、B:10、C:2)などのサブアイテムの合計数を表示する必要があります。 A:23、B:20、C:33)などがあります。上記の呼び出しを各サブタイプで行うことができますが、数百の項目では、禁止され、非常にうまく調整されない可能性があります。 –

+0

それは正しいとハックアップです;-)それはまた、データベースに2つのクエリを行います。どちらもサーバー上に存在するため、ネットワーク上のペナルティはありません。しかしそれはいいことではない。もちろん、Jayが示唆しているように、サーバー上にカスタムサービスメソッドを作成するチャンスがあるまで、私はおそらく自分でそれを行うでしょう。もしも、ある理由のために*アドホックな*クライアント側のクエリ(例えば '.where( 'Price'、 'ge'、100')を作成する必要があった場合、' inlineCount'クエリを保持するかもしれません。 – Ward

6

すでに提供されているinlineCountの回答は間違いありません。

もう1つの方法は、サーバー上の数を計算し、「サマリー」を送信することです。たとえば、このサーバ側のコントローラメソッドは、クライアントへの2つの要素オブジェクトの配列を返します。

[HttpGet] 
    public Object CustomerCountsByCountry() { 
    return ContextProvider.Context.Customers.GroupBy(c => c.Country).Select(g => new {g.Key, Count = g.Count()}); 
    } 

これは

EntityQuery.from("CustomerCountsByCountry") 
    .using(myEntityManager).execute() 
    .then(function(data) { 

    var results = data.results; 
    results.forEach(function(r) { 
     var country = r.Key; 
     var count = r.Count 
    }); 

    }); 
+0

優れていますが何らかの理由で同じことをしていましたがJSONを返していましたが、Breezeはタイプがマップされていないと不平を言っていましたが、これは間違いなく機能します。 –

-2

のvarクエリ= breeze.EntityQuery.from(「アイテム」を介して呼び出されます(0) .inlineCount(true);

関連する問題