2010-12-14 17 views
1

書籍用のカスタムODataフィードがあります。それぞれの本は複数の著者を持つことができ、著者は複数の本に関わることができるので、私はこれを結合表(Book - BookAuthorJoin - Author)を使って実装しました。私の代理オブジェクトにはBook.BookAuthorJoins BookAuthorJoin.Booksがあります。& BookAuthorJoin.Authors。二重ネストされたODataコレクションにLINQを使用する

私がやりたいことは、単一のLINQクエリで著者のすべての書籍を取得するが、フィルタの適用に問題があるという単一のクエリがあります。 2つのExpand()メソッドが必要ですが、それは機能しません。次のクエリは動作しますが、私がやろうとしているかを示していません:サーバー側で

var query = from book in ODataContext.Books.Expand("BookAuthorJoins").Expand("Authors") 
      where book.BookAuthorJoins.Author.AuthorID = authorID 
      select book; 

答えて

2

、1対多または多対多の関係は、通常は、ナビゲーションとして公開されますプロパティを使用して、結合テーブルを中間に公開すると、あなたの人生はずっと難しくなります。 EFを使用する場合は、テーブルを非表示にして、その関係をナビゲーションプロパティとして公開するだけです。いずれの場合においても 、クエリはのようになります。特定の作者のためのすべての書籍を取得する:このクエリの結果は本のちょうどフィードです

/Authors(123)/Books 

あなたは、このmigthの作品のようなものさらさ結合テーブルを保持しない場合:

/Authors(123)/BookAuthorJoins?$expand=Book 

しかし、あなたは同様にそれぞれのブックを持つすべてのBookAuthorJoinsを取得し、この時間を。

+0

Vitek-ありがとう...これを隠して私の挑戦は、私の結合テーブルにも別のフィールドが含まれているということです:並べ替え順序(書籍には一次および二次著者があるので)。だから私はこれを維持する必要がある。 –

+0

次に、展開を含む2番目のサンプルだけがこれを行う方法です。 $ selectを使用すると、サイズを小さくしたい場合にクライアントが取得するプロパティの数を制限できますが、結果には結合テーブルの結果と書籍の両方が含まれます。 –

関連する問題