例外:尝试将 Enumerable.Any 方法与移动服务查询结合使用时
Exception: when trying to use Enumerable.Any Method with Mobile Services query
我有一个使用 Xamarin Forms 构建的移动应用程序,我正在使用 Offline Data Sync in Azure Mobile Apps, to enable offline sync in my mobile application
所以,
我有两个表
- 采购订单
采购订单详细信息
public IMobileServiceSyncTable<PurchaseOrders> PurchaseOrdersTable;
public IMobileServiceSyncTable<PurchaseOrderDetails> PurchaseOrderDetailsTable;
并且我想根据 UserId
同步 PurchaseOrders Table 中的记录
然后根据PurcahseOrder的Id同步PurchaseOrderDetailsTable中的记录
为此,我正在尝试这个
根据用户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 获取 Purchase Order Details 时
await PurchaseOrderDetailsTable.PullAsync(queryName,
PurchaseOrderDetailsTable.CreateQuery().Where(pod => purchaseOrders.Any(po => po.Id == pod.PoId)));
我得到以下异常
'value(System.Collections.Generic.List`1[ProjectName.Models.PurchaseOrder]).Any(po => (po.Id == pod.PoId))' is not supported in a 'Where' Mobile Services query expression.
我能得到关于上述错误的解释以及如何解决吗?
如果您的移动数据由 table 服务支持,则 Any 不是受支持的 LINQ 运算符(请参阅:https://docs.microsoft.com/en-us/rest/api/storageservices/query-operators-supported-for-the-table-service),因此这可能是异常的来源。
由于 PurchaseOrder
不包含 PurchaseOrderDetail
的集合,我能想到的一种解决方法是从 [=14= 迭代 purchaseOrders
和 select ].
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);
}
我有一个使用 Xamarin Forms 构建的移动应用程序,我正在使用 Offline Data Sync in Azure Mobile Apps, to enable offline sync in my mobile application
所以, 我有两个表
- 采购订单
采购订单详细信息
public IMobileServiceSyncTable<PurchaseOrders> PurchaseOrdersTable; public IMobileServiceSyncTable<PurchaseOrderDetails> PurchaseOrderDetailsTable;
并且我想根据 UserId
同步 PurchaseOrders Table 中的记录然后根据PurcahseOrder的Id同步PurchaseOrderDetailsTable中的记录
为此,我正在尝试这个
根据用户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 获取 Purchase Order Details 时
await PurchaseOrderDetailsTable.PullAsync(queryName,
PurchaseOrderDetailsTable.CreateQuery().Where(pod => purchaseOrders.Any(po => po.Id == pod.PoId)));
我得到以下异常
'value(System.Collections.Generic.List`1[ProjectName.Models.PurchaseOrder]).Any(po => (po.Id == pod.PoId))' is not supported in a 'Where' Mobile Services query expression.
我能得到关于上述错误的解释以及如何解决吗?
如果您的移动数据由 table 服务支持,则 Any 不是受支持的 LINQ 运算符(请参阅:https://docs.microsoft.com/en-us/rest/api/storageservices/query-operators-supported-for-the-table-service),因此这可能是异常的来源。
由于 PurchaseOrder
不包含 PurchaseOrderDetail
的集合,我能想到的一种解决方法是从 [=14= 迭代 purchaseOrders
和 select ].
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);
}