C# OData筛选器和Guid字段存在问题

C# OData筛选器和Guid字段存在问题,c#,odata,C#,Odata,我正在尝试使用OData获取一些代码。下面的代码似乎不起作用 ds是OpenDataServiceProxy 适配器类型ID是Guid的字符串表示形式 适配器名称是一个字符串名称 ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_S

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

ds是OpenDataServiceProxy

适配器类型ID是Guid的字符串表示形式

适配器名称是一个字符串名称

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error');
上面的行给出了以下错误:

位置0处应为“System.Boolean”类型的表达式

如果我删除过滤器的Guid部分,使其只使用“Name”部分,那么它就可以正常工作

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

谁能看出我做错了什么

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

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

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

guid值的格式需要与guid“”相同-有关详细信息,请参阅此: 不知道使用DataAdapterType.DataAdapterTypeId想要实现什么,但点字符在筛选器表达式中没有特殊意义,因此它可能无法实现您想要的功能。如果DataAdapters实体集具有DataAdapterType类型的实体,而DataAdapterType又具有GUID类型的属性DataAdapterTypeId,则可以通过简单的

DataAdapterTypeId eq guid'<value>'
DataAdapterTypeId eq guid“”

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

对于OData v4,在ASP.NET上对我有效的是

“DataAdapterTypeId相等”+adapterTypeId


注意guid值周围没有引号或强制转换。如果
adapterTypeId
不是GUID,则会引发错误

我做了您建议的更改,但现在我收回了所有记录,而不仅仅是与筛选器匹配的记录。我已经在我的原始问题中添加了详细信息。不要在$filters周围放置paradesis。如果您想要两个条件,请使用:$filter=Name eq'foo'和Description eq'bar'之类的内容。这里对语法进行了详细描述:@vitekkarasmssft所有链接似乎都不再有效。