1

以前のバージョンのテーブル ストレージ API では、コンテキストとnew式を使用してサーバー側でプロジェクションを処理し、帯域幅を節約する必要がありました。

var result =
    GetContext().CreateQuery<MyEntity>(TABLENAME)
    .Where(...)
    .Select(e => new { e.ColumnToProject }) //convenient to have the real reference to the entity's properties here
    .AsTableServiceQuery().ToList().Select(ee => ee.ColumnToProject);

2012年 10 月の API に関するこのガイドでは、Microsoft は EntityResolver で DynamicTableEntity を使用してプロジェクションを処理しています。構文は不必要に複雑で、列名を参照するには文字列を使用する必要があります。

var result =
    tableReference.ExecuteQuery(
        new TableQuery<DynamicTableEntity>()
            .Where(...)
            .Select(new[] {"ColumnToProject"}),
        (key, rowKey, timestamp, properties, etag) => 
            properties["ColumnToProject"].GuidValue) //lets say ColumnToProject contains a guid in this example
    .ToList()

新しい API バージョンでプロジェクションを行うよりきれいな方法はありますか? 特に、文字列ではなく列名への実際の参照を使用できるようにするためです。これは、後でエンティティでプロパティ名が変更された場合に非常に不便で忘れやすいものです。

4

1 に答える 1

0

残念ながら、そうではないようです。(自分でもっときれいな方法を探しているときにあなたの質問を見つけました)

変更を説明するチームブログエントリによると、

このリリースではIQueryable実装を提供していないため、アプリケーションを2.0リリースに移行し、新しいテーブル実装を活用したい開発者は、提供された構文を使用してクエリを再構築する必要があります。

WindowsAzureストレージクライアントライブラリ2.0テーブルの詳細

于 2012-11-14T12:50:28.753 に答える