认为更新 WAMS 记录需要做的是选择我想要的记录,然后修改我要更改的所选记录的成员,最后对该记录调用 Update,我得到了以下代码:
public static async Task<bool> UpdateInvitation(string senderID, string readerName, string senderDeviceID)
{
try
{
IMobileServiceTable<WAMS_INVITATIONS> invitationsTable = App.MobileService.GetTable<WAMS_INVITATIONS>();
MobileServiceTableQuery<WAMS_INVITATIONS> invitationRecordToUpdate =
invitationsTable.Where(i => i.SenderID == senderID).
Where(i => i.ReaderName == readerName).
//Select(i => i.SenderDeviceID).
Take(1); // the query returns a List, but I only want 1 record (and it should only return 1)
//invitationRecordToUpdate.SenderDeviceID = senderDeviceID; <-- "SenderDeviceID" not recognized
await invitationsTable.UpdateAsync(invitationRecordToUpdate);
}
catch (Exception)
{
return false;
}
return true; // If no exception, assume record was inserted successfully
}
...但它甚至不会编译。我得到的错误消息是:
1) *“Microsoft.WindowsAzure.MobileServices.IMobileServiceTable.Upd ateAsync(PhoneApp.Data.WAMS_INVITATIONS)”的最佳重载方法匹配有一些无效参数*
...好的,但是无效的论点是什么?
2) *参数 1:无法从 'Microsoft.WindowsAzure.MobileServices.MobileServiceTableQuery 转换
' 到 'PhoneApp.Data.WAMS_INVITATIONS'"*
我希望invitationRecordToUpdate 包含 WAMS_INVITATIONS 的所有成员/列,包括 SenderDeviceID,但没有......为什么?更重要的是,更新 WAMS 记录的规范/首选方法(没有双关语)是什么?
更新
(没有双关语,虽然这个问题确实围绕更新)
尝试使用建议的答案,这不会'编译:
invitationsTable.Where(i => i.SenderID == senderID && i.ReaderName == readerName).SingleOrDefault
();
(在VS编辑器中,“SingleOrDefault”比毛主席的书还红)
...还有这个:
await invitationsTable.UpdateAsync(invitationRecordToUpdate[0]);
...也不计算,与:“无法使用 [] 将索引应用于“Microsoft.WindowsAzure.MobileServices.MobileServiceTableQuery”类型的表达式”
更新 2
将其更改为:
IMobileServiceTable<TASLS_WAMS_INVITATIONS> invitationsTable = App.MobileService.GetTable<TASLS_WAMS_INVITATIONS>();
...对此:
var invitationsTable = App.MobileService.GetTable<TASLS_WAMS_INVITATIONS>();
...没有区别(它不应该 - 所做的只是根据类型的构造函数使显式数据类型隐式。
所以我的代码现在是:
public static async Task<bool> UpdateInvitation(string senderID, string readerName, string senderDeviceID)
{
try
{
IMobileServiceTable<TASLS_WAMS_INVITATIONS> invitationsTable = App.MobileService.GetTable<TASLS_WAMS_INVITATIONS>();
MobileServiceTableQuery<TASLS_WAMS_INVITATIONS> invitationRecordToUpdate =
invitationsTable.Where(i => i.SenderID == senderID).
Where(i => i.ReaderName == readerName).
Take(1);
if (null != invitationRecordToUpdate)
{
//await invitationsTable.UpdateAsync(invitationRecordToUpdate[0]); //both of these fail...
//await invitationsTable.UpdateAsync(invitationRecordToUpdate);
}
}
catch (Exception)
{
return false;
}
return true; // If no exception, assume record was inserted successfully
}
...如您所见,我无法 UpdateAsync,因为这两种方法(已注释掉)都无法编译。