在2012年10月的Azure Table Services中投影,而无需使用字符串来引用该列



在表存储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

最新更新