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 には、SenderDeviceID を含む WAMS_INVITATIONS のすべてのメンバー/列が含まれていると思いますが、そうではありません...なぜですか? さらに重要なことに、WAMS レコードを更新するための正規の/推奨される方法 (しゃれは意図されていません) は何ですか?
アップデート
(しゃれは意図されていませんが、この質問は更新を中心に展開しています)
提案された回答を使用しようとすると、これはコンパイルされません:
invitationsTable.Where(i => i.SenderID == senderID && i.ReaderName == readerName).SingleOrDefault
();
(VSエディタでは、「SingleOrDefault」は毛沢東会長の本よりも赤くなっています)
...この:
await invitationsTable.UpdateAsync(invitationRecordToUpdate[0]);
...また、次のように計算しません。
更新 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 を実行する方法 (コメント アウト) はどちらもコンパイルできないため、UpdateAsync を実行できません。