C# Azure table services 2012年10月版中的投影,不使用字符串引用列

C# Azure table services 2012年10月版中的投影,不使用字符串引用列,c#,azure,azure-storage,azure-table-storage,C#,Azure,Azure Storage,Azure Table Storage,在以前版本的表存储API中,我们必须使用上下文和新的表达式来处理服务器端的投影以节省带宽: var result = GetContext().CreateQuery<MyEntity>(TABLENAME) .Where(...) .Select(e => new { e.ColumnToProject }) //convenient to have the real reference to the entity's properties here

在以前版本的表存储API中,我们必须使用上下文和新的表达式来处理服务器端的投影以节省带宽:

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);
var结果=
GetContext().CreateQuery(TABLENAME)
.其中(…)
.Select(e=>new{e.ColumnToProject})//便于在此处对实体的属性进行真正的引用
.AsTableServiceQuery().ToList().Select(ee=>ee.ColumntProject);
在2012年10月的API中,microsoft使用DynamicTableEntity和EntityResolver来处理投影。语法非常复杂,单词本身就是需要使用字符串来引用列名

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()
var结果=
tableReference.ExecuteQuery(
新建TableQuery()
.其中(…)
.Select(新建[]{“ColumntProject”}),
(键、行键、时间戳、属性、etag)=>
属性[“ColumntProject”].GuidValue)//在本例中,假设ColumntProject包含guid
托利斯先生()

在新的API版本中,有没有更漂亮的投影方式?特别是,我可以使用列名的真实引用,而不是字符串,如果以后在实体中更改属性名,这将非常不方便,而且很容易忘记。

不幸的是,它似乎不是这样。(我自己在寻找更漂亮的方式时发现了你的问题)

根据描述变更的teamblog条目

注意,对于此版本,我们没有提供IQueryable 实现,因此将应用程序迁移到 2.0版本,并且希望利用新的表实现,将需要使用提供的语法重新构造查询


我正在使用一个带有静态字段/get{}语句的类来代替硬编码字符串。我也是,但这恰恰解决了问题。更改实体中的属性名称不会更改静态字段。我想知道类似的事情=>我想实现一个基于ITableEntity的类,该类包含一些必需的属性和可以像DynamicTableEntity属性一样访问的动态集合。我认为这样做意味着覆盖ITableEntity.ReadEntity和ITableEntity.WriteEntity方法,但我找不到任何这样的例子。