OData过滤器和Guid字段的问题

时间:2010-10-08 11:31:02

标签: c# odata

我正在尝试使用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, '');

3 个答案:

答案 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

相关问题