在以前版本的表存储 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 的本指南中,微软使用带有 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 版本进行投影?特别是这样我就可以使用对列名的真实引用而不是字符串,如果稍后在实体中更改属性名称,这将非常不方便并且容易忘记。