检测到具有不兼容类型的二元运算符。为运算符种类 'And' 找到了操作数类型 'Edm.Int32' 和 'Edm.Int32'
A binary operator with incompatible types was detected. Found operand types 'Edm.Int32' and 'Edm.Int32' for operator kind 'And'
当我从我的移动应用程序通过 IMobileServiceClient 查询我的 Azure 数据库时,我收到以下查询错误:
https://domain.azurewebsites.net/tables/Entities?$filter=(substringof('f',OriginalName) and ((Types and 1) ne 0))&$orderby=Start&$skip=0&$top=20&$select=OriginalName,OriginalSlogan,Description,Start,End,Types,Id,Version,CreatedAt,UpdatedAt,Deleted
The query specified in the URI is not valid. A binary operator with incompatible types was detected. Found operand types 'Edm.Int32' and 'Edm.Int32' for operator kind 'And'."
但是当直接使用
查询数据库时
Select * from Entities where ((Types & 1) <> 0)
它工作正常。
In Transact-SQL Microsoft Docs it is stated that the bitwise and operator is valid for two ints (which are 32 bit types). OData Doc 指出 edm.Int32 表示一个带符号的 32 位整数值。
我的应用中查询的重要部分是
query = query.Where(f => (f.TypesDb & types) != 0);
f.TypesDb
和 types
在 C# 代码中都是整数。 (注:f.TypesDb
通过json序列化映射到Types
)
那么为什么类型不兼容?
IMobileServiceClient 将代码中的 &
错误地转换为 URL 过滤器参数中的 and
。
and
被解释为 逻辑和 ,因此类型 Edm.Int32
与此不兼容。
无法在 URL 的过滤器参数中使用 按位和 。
作为一个肮脏的解决方法,我现在在数据库中存储逗号分隔的 int
字符串并解析它,而不是存储表示 flag enum
.
的整数
当我从我的移动应用程序通过 IMobileServiceClient 查询我的 Azure 数据库时,我收到以下查询错误:
https://domain.azurewebsites.net/tables/Entities?$filter=(substringof('f',OriginalName) and ((Types and 1) ne 0))&$orderby=Start&$skip=0&$top=20&$select=OriginalName,OriginalSlogan,Description,Start,End,Types,Id,Version,CreatedAt,UpdatedAt,Deleted
The query specified in the URI is not valid. A binary operator with incompatible types was detected. Found operand types 'Edm.Int32' and 'Edm.Int32' for operator kind 'And'."
但是当直接使用
查询数据库时Select * from Entities where ((Types & 1) <> 0)
它工作正常。
In Transact-SQL Microsoft Docs it is stated that the bitwise and operator is valid for two ints (which are 32 bit types). OData Doc 指出 edm.Int32 表示一个带符号的 32 位整数值。
我的应用中查询的重要部分是
query = query.Where(f => (f.TypesDb & types) != 0);
f.TypesDb
和 types
在 C# 代码中都是整数。 (注:f.TypesDb
通过json序列化映射到Types
)
那么为什么类型不兼容?
IMobileServiceClient 将代码中的 &
错误地转换为 URL 过滤器参数中的 and
。
and
被解释为 逻辑和 ,因此类型 Edm.Int32
与此不兼容。
无法在 URL 的过滤器参数中使用 按位和 。
作为一个肮脏的解决方法,我现在在数据库中存储逗号分隔的 int
字符串并解析它,而不是存储表示 flag enum
.