私はOrdersを持つUserを持っています。ユーザーを選択して注文を展開して、Orders.valid == true
のみを含めたいとします。このような何か:where()
方法が少しTempHireリポジトリから取得され、修正されフィルタリングされた関連エンティティを含めるためのBreezeクエリ
// This is just a pseudo-query of what I want to achieve
// Note singluar 'Order.valid' also does not work
let query= new Predicate('guid', 'eq', this.user.guid).and(new Predicate('Orders.valid', 'eq', 'true');\
let users= this.uow.userSet.where(query, ['Orders']);
:
where(predicate: Predicate, expand: string[] = null): Promise<any[] | Entity[]> {
return new Promise<any[] | Entity[]>((resolve) => {
let query = this.baseQuery().where(predicate)
if(expand) query = query.expand(expand);
は、上記のクエリのように動作しない条件は、エンティティのプロパティに適用することができませんコレクションです。
これをクライアント側で解決するために、私は単純に2つのクエリを実装しました.1つはユーザーをフェッチし、もう1つはユーザーの有効な注文をフェッチします。私はこれを単一のクエリにすることを好むでしょう。
また、サーバー側でこれを解決しようとしました。私は、Breeze EFContextProvider<>
を公開している[BreezeController]を使用して、として各エンティティコレクションセットを公開するTempHireメソッドを再び使用しています。クエリがUserSet()
に直接送信されたときに風がユーザーのOrders
プロパティを展開するためにさらさOrderSet()
メソッドを使用することは思えないしかし
return _efContext.Context.OrderSet.Where(o => o.valid);
:OrderSet()
の中で私は、次のコードを試してみました。
私はいつも(のLINQを使用して)、有効な注文を含めるようにUserSet()
内で直接Orders
プロパティを拡大について考え、私はいつもOrders
がUserSet
に、すべてのクエリに対して返され、私はBreezeControllerは、これらを除去するかどうかはわからないしたくありません不要です。
各エンティティセットの個々のwhere句を使用してサーバーに複数の呼び出しを行うのではなく、クライアント側またはサーバー側を実装する方が良い/異なる方法がありますか?
おそらく、UserOrderSet()
エンドポイントを作成し、有効な注文のあるユーザーを希望するときに直接呼び出す必要がありますか?思考?
私はこれがすべて1つのクエリで行うことができるとは思いません。私はそれをサーバー側でLinqと投影を介して直接手作業でサブクエリを作成しようとしましたが、 "エンティティまたは複合型 'Model.User'をLINQ to Entitiesクエリで構築できません" – Mike