我有一个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;
}
感谢任何提示,
埃里克
答案 0 :(得分:1)
您也是Java开发人员吗?我有这个问题因为在Java中我们需要用String#equals方法比较字符串,哈哈。
出于某种原因,MobileServices不允许我们在这种情况下使用Equals。
要解决您的问题,请改用 == 。正如你在这里看到的C# difference between == and Equals()在这种情况下都具有相同的效果。
Where(fahrerinfo => fahrerinfo.Imei == imei)