0

这两个问题的混合:

在 Azure 移动服务的 WHERE 子句中放置多个值

Try/Catch 不适用于带有 Azure 移动服务的 WP8 C# .NET

这段代码:

public static class Extensions
{
 public async static Task<List<T>> In<T>(this IMobileServiceTable<T> table, 
 List<int> ids)
 {
    var query = new StringBuilder("$filter=(");
    for (int i = 0; i < ids.Count; i++)
    {
        query.AppendFormat("id eq {0}", ids[i]); //don't forget to url escape 
        and 'quote' strings
        if (i < ids.Count - 1)
        {
            query.Append(" or ");
        }
    }
    query.Append(")");
    var list = await table.ReadAsync(query.ToString());
    var items = list.Select(i => 
    MobileServiceTableSerializer.Deserialize<T>(i)).ToList();
    return items;
 }
}

不再适用于新的 MobileServices 1.0,因为 MobileServiceTableSerializer 已消失。任何人都可以提出一个替代方案来做同样的事情吗?

4

1 回答 1

1

编辑:找到了一个更好的解决方案, List.Contains 现在可以使用,因此您可以使用它:

List<int> ids = new List() { 1, 2 };
var items = await yourTable.Where(x => ids.Contains(x.Id)).ToCollectionAsync();

在这里,这行得通,刚刚测试过。不过可能有更好的方法。

并感谢该代码,可能会派上用场:)

public async static Task<List<T>> In<T>(this IMobileServiceTable<T> table,
     List<int> ids)
    {
        var query = new StringBuilder("$filter=(");
        for (int i = 0; i < ids.Count; i++)
        {
            query.AppendFormat("id eq {0}", ids[i]);
            if (i < ids.Count - 1)
            {
                query.Append(" or ");
            }
        }
        query.Append(")");
        var list = await table.ReadAsync(query.ToString());
        List<T> items = new List<T>();
        foreach (var item in list)
        {
            items.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(item.ToString()));
        }

        return items;
    }
于 2013-06-21T15:55:41.080 回答