2012-04-13 33 views
1

我有一個ASP.NET Web API控制器,公開IQueryable(Of String) - 這是一個描述列表。這些字段的數量可能是數以萬計,因此我使用$top$skip只能得到它的一大塊 - 工作正常。

現在我試圖通過OData substringof('mydesc',Property)過濾器來過濾這些結果。正如你所看到的,它需要我傳遞一個屬性名稱來過濾。但是,由於我返回了一個字符串列表,實際上我沒有任何屬性需要過濾。

這會導致服務器返回錯誤,如 No property or field 'tostring' exists in type 'String' - 當用$filter=substringof('asd',tostring)調用時。

如果我將呼叫更改爲$filter=substringof('asd',''),則不會引發錯誤,但也無結果。

我的問題是,我可以以某種方式格式化$filter運算符以在字符串列表中查找子字符串,而不查找屬性/字段,或者我將不得不聲明具有單個屬性的類,只是爲了啓用過濾?

回答

3

自從我上次回答以來,情況發生了變化。 OData V3支持使用'$ it'查詢原語集合。 Asp.net Web API也支持這種語法。例如,在你的控制器,你可以返回IQueryable<string>和發送類似

$過濾器=子請求( 'mydesc',$它)或

$過濾器=長度($它)GE 5

等等。你也可以暴露像IQueryable等其他基元的集合。

+0

很酷,太棒了!感謝您的更新:) – 2013-01-25 16:23:45

+0

這是目前只在夜間生成,正確嗎? – 2013-03-22 17:27:38

0

不幸的是,聲明一個具有單個屬性的類似乎是我能想到的唯一解決方案。 OData $filter沒有在C#

+0

可悲的是,這是我最終解決它的方式: - < – 2013-01-18 07:22:27

0

另一個不太明顯的方法是揭露一個計算合併值代表名單有點像this參數的任何支持,substringof然後可以用來查詢清單作爲一個單一的屬性值