0

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 を実行できません。

4

2 に答える 2

1

リターンリストの場合は、最初の要素を使用します。

       await invitationsTable.UpdateAsync(invitationRecordToUpdate[0]);

あなたはより良いlinqを作ることができます:

invitationsTable.Where(i => i.SenderID == senderID && i.ReaderName ==  readerName).SingleOrDefault();

アイテムが存在することを確認することを忘れないでください:

if(invitationRecordToUpdate!=null)
{//UPDATE }

SingleOrDefaultメソッド:

シーケンスの唯一の要素を返します。シーケンスが空の場合はデフォルト値を返します。シーケンスに複数の要素がある場合、このメソッドは例外をスローします。

于 2013-01-09T20:52:12.390 に答える
1

次のように更新してエラーを表示します。

public static async Task<bool> UpdateInvitation(string senderID, string readerName, string senderDeviceID)
    {
        try
        {
            IMobileServiceTable<TASLS_WAMS_INVITATIONS> invitationsTable = App.MobileService.GetTable<TASLS_WAMS_INVITATIONS>();

            var invitationRecordToUpdate =
                invitationsTable.Where(i => i.SenderID == senderID).
                                 Where(i => i.ReaderName == readerName).
                                 Take(1).ToListAsync();

                await invitationsTable.UpdateAsync(invitationRecordToUpdate[0]);
        }
        catch (Exception)
        {
            return false;
        }
        return true; // If no exception, assume record was inserted successfully
    }

編集 Windows stre アプリを確認しました。私はこれを使用していますが、すべて問題ありません:

private IMobileServiceTable<Rating> RatingTable =
         App.MobileService.GetTable<Rating>();

    var list = await RatingTable.Where(p => p.Id == sel_item.Id && p.User == user).ToListAsync();
    vat item=list[0];
于 2013-01-11T11:06:50.993 に答える