在表存储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使用DynamiTictIntity来处理投影。语法是不必要的复杂的,单词是您需要使用字符串来引用列名。
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版本进行投影的方法?尤其是这样我可以使用对列名的真实引用,而不是字符串,这是不方便且易于忘记的,如果以后在实体中更改了属性名称。
不幸的是,它似乎并不像它。(我自己寻找更漂亮的方式时发现了您的问题)
根据Teamblog条目描述了这些更改;
请注意,对于此版本,我们尚未提供可视性 实施,因此将应用程序迁移到的开发人员 2.0发布并希望利用新表实现,需要使用提供的语法来重建其查询。
Windows Azure存储客户端库2.0表Deep Dive