【问题标题】:Problems with an OData filter and a Guid fieldOData 筛选器和 Guid 字段的问题
【发布时间】:2011-04-22 20:19:41
【问题描述】:

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

ds 是 OpenDataServiceProxy。

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

adapterName 是字符串名称

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

以上行给出以下错误:

“System.Boolean”类型的表达式应位于位置 0。

如果我删除过滤器的 Guid 部分,使其仅使用“名称”部分,它就可以正常工作。

DataAdapters 表字段“DataAdapterTypeId”是“DataAdapterTypes”表 DataAdapterTypeId 字段的外键。

谁能发现我做错了什么?

-------编辑----------

好的,我已经更改了过滤器,如下所示。我不再收到错误,而是返回了很多结果,而不是一条与过滤器匹配的记录。谁能说出为什么它没有过滤?

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

【问题讨论】:

    标签: c# odata


    【解决方案1】:

    使用 OData v4 在 ASP.NET 上对我有用的是

    'DataAdapterTypeId eq' + adapterTypeId

    注意不要在 guid 值周围加上引号或强制转换。如果adapterTypeId 不是 GUID,它将引发错误。

    【讨论】:

      【解决方案2】:

      您可以找到更新后的 URL 约定参考 here

      【讨论】:

        【解决方案3】:

        guid 值的格式需要像 guid'' - 详情请参阅:http://www.odata.org/developers/protocols/overview#AbstractTypeSystem 不知道你想用 DataAdapterType.DataAdatperTypeId 实现什么,但是点字符在过滤器表达式中没有特殊含义,所以它可能不会达到你想要的效果。如果您的 DataAdapters 实体集具有类型为 DataAdapterType 的实体,然后具有类型为 GUID 的属性 DataAdapterTypeId,那么您可以通过简单地对其进行过滤

        DataAdapterTypeId eq guid'<value>'
        

        【讨论】:

        • 我进行了您推荐的更改,但现在我恢复了所有记录,而不仅仅是与过滤器匹配的记录。我已在原始问题中添加了详细信息。
        • 不要在 $filters 周围加上括号。
        • 如果您想要两个条件,请使用类似:$filter=Name eq 'foo' 和 Description eq 'bar'
        • 语法在这里有完整的描述:odata.org/developers/protocols/uri-conventions
        • @VitekKarasMSFT 这些链接似乎都不起作用了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2021-12-08
        • 2022-08-09
        • 1970-01-01
        相关资源
        最近更新 更多