2010-10-08 63 views
8

我試圖讓一些代碼使用OData工作。下面的代碼似乎不起作用。OData過濾器和Guid字段的問題

ds是OpenDataServiceProxy。

adapterTypeId是Guid的字符串表示形式。

adapterName是一個字符串名稱

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error'); 

上面一行給出以下錯誤:

在位置0

預期如果刪除類型 'System.Boolean' 的

表達過濾器的Guid部分,這樣它只是使用「名稱」部分,它工作正常。

DataAdapters表字段「DataAdapterTypeId」是外鍵的「DataAdapterTypes」表DataAdapterTypeId字段。

任何人都可以發現我做錯了什麼嗎?

-------------------編輯----------------------

好的,我已經更改了過濾器,如下所示。我不再收到錯誤,但獲得大量結果,而不是與篩選器匹配的記錄。任何人都可以說爲什麼它不是過濾?

ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, ''); 

回答

14

GUID值需要進行格式化像GUID「」 - 看到這樣的詳細信息:http://www.odata.org/developers/protocols/overview#AbstractTypeSystem 不知道你想達到與DataAdapterType.DataAdatperTypeId什麼,但點字符在沒有特殊含義過濾表達式,所以它可能不會做你想要的。如果您DataAdapters實體集有型DataAdapterType,然後有一個屬性DataAdapterTypeId它的類型是GUID的,那麼你可以通過簡單地

DataAdapterTypeId eq guid'<value>' 
+0

我做了您推薦的更改,但現在我獲取所有記錄,而不僅僅是與過濾器匹配的記錄。我已將細節添加到我的原始問題中。 – Retrocoder 2010-10-11 08:19:20

+0

不要在$過濾器周圍放置parethesis。 – 2010-10-11 12:08:09

+0

如果同時需要兩個條件,請使用以下內容: $ filter =名稱eq'foo'和描述eq'bar' – 2010-10-11 12:08:44

1

就可以過濾你可以找到更新的URL約定參考here的實體。

1

用的OData v4的什麼對我工作在ASP.NET是

'DataAdapterTypeId eq ' + adapterTypeId

觀察不帶引號或周圍的GUID值施放。如果adapterTypeId不是GUID,則會引發錯誤。