1

WHERE複数の値を句に入れる方法を見つけようとしています。これは、INSQL で節を使用するようなものです。

私の現在のコード:

if (Log.Count() == 1)
{
    items = itemTable
        .Where(Item => Item.id == Log[0].i_id)
        .ToCollectionView();
}
else if (Log.Count() == 2)
{
    items = itemTable
        .Where(Item => Item.id == Log[0].i_id || Item.id == Log[1].i_id)
        .ToCollectionView();
}
else if (Log.Count() == 3)
{
    items = itemTable
        .Where(Item => Item.id == Log[0].i_id || Item.id == Log[1].i_id || Item.id == Log[2].i_id)
        .ToCollectionView();
}

それはかなり厄介です。WHERE大きな if ステートメントを使わずに、その句に複数の値を入れる方法が見つかりません。何か案は?

4

4 に答える 4

1

私は同じ問題に直面しました。他の人が示唆しているようにAnyまたはContainsを使用すると、サポートされていない例外が発生しました。Azureモバイルサービスフォーラムに投稿しましたが、INはまだサポートされていないと言われました。彼らは私が私のために完全に働いた拡張方法を使うようにアドバイスしました。以下は私が使用したコードです。

 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;
    }
}

次のような拡張メソッドを呼び出すことで、リストにデータを入力できます。

FavoriteJokesList = await jokeItemTable.In(favoriteJokeIds);

ソース:http ://social.msdn.microsoft.com/Forums/en-US/azuremobile/thread/b573ff6c-1f6b-4846-b44d-4678e3d26f66

于 2013-03-06T04:36:43.600 に答える