如何针对WAMS编写参数化查询?

时间:2012-12-13 01:17:56

标签: c# linq-to-sql windows-8 windows-store-apps azure-mobile-services

在这里使用一些代码:

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2012/09/19/experimenting-with-windows-azure-mobile-services.aspx

...作为查询WAMS表的“灵感”,我提出了这个:

public static async Task<string> GetMammalDeviceID(string mammalID, string zoologistDeviceID)
{
    IMobileServiceTable<DUCKBILLED_PLATYPI> table = App.MobileService.GetTable<DUCKBILLED_PLATYPI>();

    MobileServiceTableQuery<String> query =
        table.Where(i => i.mammalID == mammalID).
              Where(j => j.zoologistDeviceID == zoologistDeviceID).
              Select(k => k.mammalDeviceID);
    return query.ToString();
}

我怀疑,这是否真的是“做到这一点的方式”,甚至是一种好方法。有没有人有查询WAMS表的示例代码,这些代码会让我直截了当?

同样,以下哪项是插入记录的首选方法?

此:

DUCKBILLED_PLATYPI platypus = new DUCKBILLED_PLATYPI { mammalID = mammalEmail, zoologistDeviceID = zoologistDeviceID, zoologistName = zoologistName };
await App.MobileService.GetTable<DUCKBILLED_PLATYPI>().InsertAsync(platypus);

......或者这个:

DUCKBILLED_PLATYPI platypus = new DUCKBILLED_PLATYPI { mammalID = mammalEmail, zoologistDeviceID = zoologistDeviceID, zoologistName = zoologistName };
IMobileServiceTable<DUCKBILLED_PLATYPI> platypi = App.MobileService.GetTable<DUCKBILLED_PLATYPI>();
await platypi.InsertAsync(platypus);

1 个答案:

答案 0 :(得分:2)

query.ToString()将为您提供底层移动服务类的字符串表示形式,例如Microsoft.WindowsAzure.MobileServices.MobileServiceTableQuery``1[System.String]可能不是您想要的!

我假设您想要返回实际的mammalDeviceID?如果是这样,您需要进行两次调整,

  1. 您不能假设只返回一行,因此需要List<String>而不仅仅是String。如果您只需要一个,您可以将Take(1)添加到查询中(但它仍然是一个列表)。
  2. 您需要通过在客户端上实现查询来执行查询,在这种情况下,ToListAsync()应该有效。
  3. 类似于:

    public static async Task<List<string>> GetMammalDeviceID(string mammalID, string zoologistDeviceID)
    {
        IMobileServiceTable<DUCKBILLED_PLATYPI> table = App.MobileService.GetTable<DUCKBILLED_PLATYPI>();
    
        MobileServiceTableQuery<String> query =
            table.Where(i => i.mammalID == mammalID).
                  Where(j => j.zoologistDeviceID == zoologistDeviceID).
                  Select(k => k.mammalDeviceID);
        return await query.ToListAsync()
    }
    

    至于第二部分,除了冗长之外没有区别。我认为第一种选择的流动性更具可读性。