0

BreezeJS ライブラリを使用しているときに、クライアントで行うのと同じクエリをサーバーで実行したい場合があります。

これは簡単な例です。skip() と take() を使用したページングのために、クエリの結果がクライアントで制限されていると想像してください。「エクスポート」機能により、ページ化されていないデータセットをダウンロードできます。つまり、「テイク/スキップ」の制限なし。

単純な「Select * from TableName」タイプのクエリでは、これは些細なことですが、簡単な述語が複雑で動的に作成された場合 (よく知られているサーバー側の SQL ビューの使用を排除する) はどうなるでしょうか。

理想的には、Breeze.js .NET クライアントが Predicate を Linq Where 句に変換するために使用するソース コードを知りたいです。


これは私が今まで投稿した中で最高の質問ではないので、喜んで助けてくれ、さらに情報が必要な場合は、コメントしてください。例や詳細を投稿させていただきます.

4

1 に答える 1

3

[BreezeController]Web APIの属性を見てください。クライアント クエリ パラメーターを含む LINQ 式を構成する方法が表示されます。

ただし、適切なサーバー側のデータ ウォッチャーを設定し、それを使用してクライアントが関心のある変更をフィルター処理できるように、解析された形式でクライアント クエリ情報を保持する方が、あなたの目的のために役立つと思います。Web API は、この情報をオプション パラメータで提供します。ODataQueryOptions<T> optionsここTで、 は と同じ型IQueryable<T>です。

理論的には、実際には関心のある変更を登録する単なるメソッドである「リソース」にクエリを送信できます

たとえば、人気商品のクエリがあるとします。

var hotStuff = Breeze.EntityQuery.from('Products').where('IsHot', 'eq', 'true');
manager.executeQuery(hotStuff).then(成功、失敗);

別のリソースをターゲットにして、そのクエリを少し修正します

var hotStuffWatcher = Breeze.EntityQuery.from('ProductsWatch').where('IsHot', 'eq', 'true');
manager.executeQuery(hotStuffWatcher); // 何を返すか、何を返すかは気にしません

Web API 側では、そのメソッドは

[HttpGet]
[BreezeQueryable] // このメソッドが IQueryable<T> を返したかのように扱うように Breeze に指示する必要があります
public RegistrationToken ProductsWatch(ODataQueryOptions<Product> options)
{
    var registrationToken = Watch<Product>(オプション);
    registrationToken を返します。// クライアントがウォッチをキャンセルしたい場合に役立つ可能性があります
}

私は主にあなたの研究の手段を提供するために推測していることを理解してください.

于 2013-08-23T00:49:30.510 に答える