【问题标题】:Azure Mobile Apps Offline Client Throws NotSupportedException on QueryAzure 移动应用脱机客户端在查询时引发 NotSupportedException
【发布时间】:2017-02-25 15:56:17
【问题描述】:

我有一个 Azure 移动应用 Xamarin.Forms PCL 客户端并启用了离线同步。我尝试从后端提取数据,然后使用 Where 子句从离线存储中查询数据。这引发了以下异常,我不知道为什么。

同步错误:“Where”移动服务查询表达式不支持“fahrerinfo.Imei.Equals("02032032030232")”。

    public async Task SyncAsync()
    {

        ReadOnlyCollection<MobileServiceTableOperationError> syncErrors = null;

        try
        {
             await OfflineSyncStoreManager.Instance.TruckFahrerTable.PullAsync("allTruckFahrerItems",
                OfflineSyncStoreManager.Instance.TruckFahrerTable.CreateQuery());

            Debug.WriteLine("SyncAsync: PUSH/PULL completed.");

        }
        catch (MobileServicePushFailedException e)
        {
            Debug.WriteLine("SyncAsync: PUSH failed.");
            Debug.WriteLine(e.Message);
        }
        catch (Exception e)
        {
            Debug.WriteLine("SyncAsync: PUSH/PULL failed.");
            Debug.WriteLine(e.Message);
            //Debugger.Break();
        }
    }

    public async Task<ObservableCollection<TruckFahrer>> GetTruckFaherAsync(bool syncItems)
    {
        try
        {
            if (syncItems)
            {
                await OfflineSyncStoreManager.Instance.SyncAsync().ConfigureAwait(false);
            }

            var deviceInfo = DependencyService.Get<IDeviceInfo>().GetPhoneInfo();
            var imeiString = deviceInfo[trucker_rolsped.PhoneInfo.PhoneInfo.ImeiKey];

            var imei = imeiString.Equals("000000000000000") ? deviceInfo[trucker_rolsped.PhoneInfo.PhoneInfo.IdKey] : imeiString;

            IEnumerable<TruckFahrer> items = 
                await OfflineSyncStoreManager.Instance.TruckFahrerTable
                //.Where(fahrerinfo => fahrerinfo.Imei.Equals(imei)) TODO: Why does that throw an exception???
                .ToEnumerableAsync();

            // TODO: Because above does not work
            items = items.Where(fahrer => fahrer.Imei.Equals(imei));

            return new ObservableCollection<TruckFahrer>(items);
        }
        catch (MobileServiceInvalidOperationException msioe)
        {
            Debug.WriteLine(@"Invalid sync operation: {0}", msioe.Message);
            Debugger.Break();
        }
        catch (Exception e)
        {
            Debug.WriteLine(@"Sync error: {0}", e.Message);
            Debugger.Break();
        }

        return null;
    }

感谢任何提示,

埃里克

【问题讨论】:

    标签: azure-mobile-services


    【解决方案1】:

    您也是 Java 开发人员吗?我遇到了这个问题,因为在 Java 中我们需要将字符串与 String#equals 方法进行比较,哈哈。

    出于某种原因,MobileServices 不允许我们在这种情况下使用 Equals。

    要解决您的问题,请改用 ==。正如您在此处看到的,C# difference between == and Equals() 在这种情况下具有相同的效果。

    Where(fahrerinfo => fahrerinfo.Imei == imei)
    

    【讨论】:

    • 嗨,不,我不是 Java 开发人员。谢谢你的回答。 MobileServiceTable Query 没有实现 Linq Query 的所有方法。 Equals 就是其中之一。
    • 也谢谢你,我不知道 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多