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 包含 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,因为这两种方法(已注释掉)都无法编译。

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 str 应用程序。我用这个,一切正常:

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 回答