Когда я запрашиваю свою базу данных Azure через IMobileServiceClient из моего мобильного приложения, я получаю следующую ошибку для запроса:
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)
отлично работает.
В Документах Microsoft Transact-SQL указано, что побитовый оператор и оператор допустимы для двух целых чисел (которые являются 32-битными типами). OData Doc утверждает, что edm.Int32 представляет 32-разрядное целое число со знаком.
Важная часть моего запроса в моем приложении -
query = query.Where(f => (f.TypesDb & types) != 0);
И f.TypesDb
, и types
являются целыми числами в коде C #. (Примечание: f.TypesDb
отображается на Types
через сериализацию JSON)
Так почему же типы несовместимы?