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 的本指南中,微软使用带有 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 版本并希望利用新表实现的开发人员需要使用提供的语法重建他们的查询。

Windows Azure 存储客户端库 2.0 表深入了解

于 2012-11-14T12:50:28.753 回答