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约定参考。