2011-09-14 42 views
4

這裏是設置:我有一個「學生」誰有一個相關的實體「課程」(1到很多)。每個「課程」都有一個相關實體「期間」,其中包含課程的所有時間和日期詳細信息。我想回到所有誰在2011年OData查詢可以指定一個引用嵌套實體的過濾器嗎?

有一門課程,學生的我已經試過這樣:
〜/學生()$展開;課程/週期& $濾芯的課程/期/年當量2011
但它導致一個錯誤:沒有屬性「期間」存在於類型「System.Data.Objects.DataClasses.EntityCollection`1 [[課程]]

顯然,週期是被當作一個屬性,而比實體,但我很困惑,因爲下面的查詢確實返回我期望的結果,並且它使用幾乎相同的語法:
〜/ Student()?$ expand = Course/Period & $ sele ct =課程/期間/年

所以我做錯了$ filter語法,或者這是不可能的?

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

謝謝你,我懷疑是一對多關係是問題,謝謝你解釋如何實際處理這個問題。 – Mike

+3

任何googlers,我也發現這個問題是有幫助的: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中引用該迭代器。

參考可在OData Documentation中找到在5.1.1.10.1節(搜索「/任何」)。

注意:您也可以全部確保所有課程符合某些標準。

相關問題