以前のバージョンのテーブル ストレージ 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 バージョンでプロジェクションを行うよりきれいな方法はありますか? 特に、文字列ではなく列名への実際の参照を使用できるようにするためです。これは、後でエンティティでプロパティ名が変更された場合に非常に不便で忘れやすいものです。