2011-09-14 2 views
4

ここにセットアップがあります。関連するエンティティ「コース」(1対多)を持つ「スチューデント」があります。各「コース」には、コースのすべての時間と日付の詳細を含む関連エンティティ「期間」があります。私は戻って2011年ODataクエリでネストされたエンティティを参照するフィルタを指定できますか?

でコースを持っていた学生のすべてを取得したい私はこれを試してみた:?
〜/学生()$拡大=コース/期間& $フィルター=コース/期間/年当2011
それはエラーになる:いいえプロパティ '期間「タイプに存在しないSystem.Data.Objects.DataClasses.EntityCollection`1 [コース]

明らかに、期間がなくプロパティとして扱われていますエンティティよりも、私は混乱しています。なぜなら、次のクエリは期待した結果を返し、ほぼ同じ構文を使用するからです。
〜/ Student()?$ expand = Course/Period & $ sele ct =コース/期間/年

$フィルタの構文に間違っていますか、これはできませんか?

すべての洞察力についてはTIA。

答えて

2

ナビゲーションプロパティがシングルトンの場合でもフィルタは機能しますが、コレクション(1〜複数)なのでフィルタは機能しません。主に、それがどういう意味だろうとはっきりしていないからです。あなたは2011年にすべてのコースを持っている生徒、またはちょうどいくつかの生徒...が必要ですか? 最新のCTP(http://blogs.msdn.com/b/astoriateam/archive/2011/06/30/announcing-wcf-data-services-june-2011-ctp-for-net4-amp-sl4.aspx)あなたが望むことができるようにする必要のあるすべての演算子がサポートされています。詳細については、このブログ記事を参照してください:http://www.odata.org/blog/even-more-any-and-all

+0

ありがとう、私は1対多関係が問題だったと思っていましたが、実際にこれをどのように扱うか説明してくれてありがとう。 googlerのための – Mike

+3

、私はまた、このSOの質問が参考になることを発見しました:http://stackoverflow.com/a/16967841/183624 –

0

はい、可能です。このようなものを使う必要があります。

~/Student()?$expand=Course/Period&$filter=Course/any(d:d/Period/Year eq 2011) 

Course/any()コレクションで何かが()で表現と一致するかどうかを確認します。

d:は、コレクションのイテレータを指定します。このイテレータは、d/Period/Yearで参照されます。

参考文献は、5.1.1.10.1項(「/ any」で検索)のOData Documentationにあります。

注:すべてのコースがいくつかの基準に一致するように/ allを行うこともできます。