【问题标题】:Exception: when trying to use Enumerable.Any Method with Mobile Services query例外:当尝试将 Enumerable.Any 方法与移动服务查询一起使用时
【发布时间】:2019-07-27 09:31:46
【问题描述】:

我有一个使用 Xamarin Forms 构建的移动应用程序,我正在使用 Offline Data Sync in Azure Mobile Appsto enable offline sync in my mobile application

所以, 我有两张桌子

  • 采购订单
  • 采购订单详情

    public IMobileServiceSyncTable<PurchaseOrders> PurchaseOrdersTable;
    public IMobileServiceSyncTable<PurchaseOrderDetails> PurchaseOrderDetailsTable;
    

我想根据 UserId

同步 PurchaseOrders 表中的记录

然后根据PurcahseOrder的Id同步PurchaseOrderDetails表中的记录

为此,我正在尝试这样做

根据用户 ID 获取采购订单

var purchaseOrders = (await GetAllPurchaseOrdersAsync(syncFromServer:true, userId)).ToList();

// in sync method 
await PurchaseOrdersTable.PullAsync(queryName, PurchaseOrdersTable.CreateQuery().Where(w => w.Userid == userId));

当我尝试根据 PurchaseOrders 列表中的 Id 获取采购订单详细信息时

await PurchaseOrderDetailsTable.PullAsync(queryName,
                         PurchaseOrderDetailsTable.CreateQuery().Where(pod => purchaseOrders.Any(po => po.Id == pod.PoId)));

我得到以下异常

'Where' 移动设备不支持

'value(System.Collections.Generic.List`1[ProjectName.Models.PurchaseOrder]).Any(po => (po.Id == pod.PoId))'服务查询表达式。

我能得到关于上述错误的解释以及如何解决它吗?

【问题讨论】:

  • PurchaseOrderPurchaseOrderDetail之间的关系是如何定义的?
  • @RyanHill-MSFT 感谢您的回复,我正在处理一个不包含PurchaseOrdersPurchaseOrderDetails 之间关系的旧项目

标签: linq xamarin.forms azure-mobile-services query-expressions notsupportedexception


【解决方案1】:

如果您的移动数据由表服务支持,则 Any 不是受支持的 LINQ 运算符(请参阅:https://docs.microsoft.com/en-us/rest/api/storageservices/query-operators-supported-for-the-table-service),因此这可能是异常的来源。

由于PurchaseOrder 不包含PurchaseOrderDetail 的集合,我能想到的一种解决方法是迭代purchaseOrders 并从purchaseOrderDetails 中进行选择。

var poDetails = new List<PurchaseOrderDetail>();
foreach (var po in purchaseOrders)
{
   var poDetail = await PurchaseOrderDetails.PullAsync(queryName, PurchaseOrderDetailsTable.CreateQuery().Where(pod => po.Id == pod.PoId);
   poDetails.Add(poDetail);
}

【讨论】:

  • 谢谢你的回答,我也用同样的方法解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多