Azure移动应用程序脱机客户端在查询时引发NotSupportedException

时间:2016-10-16 17:34:57

标签: azure-mobile-services

我有一个Azure Mobile Apps Xamarin.Forms PCL客户端并启用了脱机同步。我尝试从后端拉取数据,然后使用Where子句从离线存储中查询数据。抛出以下异常,我不知道为什么。

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

    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;
    }

感谢任何提示,

埃里克

1 个答案:

答案 0 :(得分:1)

您也是Java开发人员吗?我有这个问题因为在Java中我们需要用String#equals方法比较字符串,哈哈。

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

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

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