我正在尝试使用OData获取一些代码。以下代码似乎不起作用。
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字段。
有人能发现我做错了吗?
------------------- EDIT ----------------------
好的,我已经更改过滤器,如下所示。我不再收到错误,但得到的结果很多,而不是一个匹配过滤器的记录。任何人都可以说为什么不过滤?
ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, '');
答案 0 :(得分:16)
guid值需要像guid''一样形成 - 有关详细信息,请参阅此内容:http://www.odata.org/developers/protocols/overview#AbstractTypeSystem 不知道你想用DataAdapterType.DataAdatperTypeId实现什么,但点字符在过滤器表达式中没有特殊含义,所以它可能不会做你想要的。如果您的DataAdapter实体集具有DataAdapterType类型的实体,然后具有GUID类型的属性DataAdapterTypeId,那么您可以通过简单地对其进行过滤
DataAdapterTypeId eq guid'<value>'
答案 1 :(得分:1)
使用OData v4对ASP.NET有用的是
'DataAdapterTypeId eq'+ adapterTypeId
在guid值周围注意没有引号或强制转换。如果adapterTypeId
不是GUID,则会抛出错误。
答案 2 :(得分:0)
您可以找到更新的网址约定参考here。