ODatafilter和Guid字段的问题

我正在尝试使用OData获取一些代码。 以下代码似乎不起作用。

ds是OpenDataServiceProxy。

adapterTypeId是Guid的字符串表示forms。

adapterName是一个字符串名称

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

上面的行给出以下错误:

预期在位置0处的类型’System.Boolean’的表达式。

如果我删除filter的Guid部分,使它只是使用“名称”部分,它工作正常。

DataAdapters表字段“DataAdapterTypeId”外键地键入“DataAdapterTypes”表DataAdapterTypeId字段。

谁能发现我做错了什么?

– – – – – – – – – -编辑 – – – – – – – – – – –

好的,我已经更改filter,如下所示。 我不再收到错误但得到很多结果,而不是一个匹配filter的记录。 任何人都可以说为什么它不过滤?

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

guid值需要像guid那样格式化 – 有关详细信息,请参阅此内容: http : //www.odata.org/developers/protocols/overview#AbstractTypeSystem不知道您希望使用DataAdapterType.DataAdatperTypeId实现什么,但是点字符在filter表达式中没有特殊含义,因此它可能不会执行您想要的操作。 如果您的DataAdapter实体集具有DataAdapterType类型的实体,然后具有GUID类型的属性DataAdapterTypeId,那么您可以简单地对其进行过滤

 DataAdapterTypeId eq guid'' 

使用OData v4对ASP.NET有用的是

‘DataAdapterTypeId eq’+ adapterTypeId

在guid值周围不要引用任何引号或强制转换。 如果adapterTypeId不是GUID,则会抛出错误。

您可以在此处找到更新的URL约定参考。