C# 存储客户端库2.0—为什么API不如1.7直观?

C# 存储客户端库2.0—为什么API不如1.7直观?,c#,.net,azure,azure-storage,azure-table-storage,C#,.net,Azure,Azure Storage,Azure Table Storage,我正在迁移到使用Azure表存储的新存储客户端库 查询以前的存储客户端库1.7命名空间: var orders = serviceContext .CreateQuery<Order>(tableName) .AsTableServiceQuery<Order>() .Where(e => e.PartitionKey == partitionKey &&a

我正在迁移到使用Azure表存储的新存储客户端库

查询以前的存储客户端库1.7命名空间:

var orders = serviceContext
                 .CreateQuery<Order>(tableName)
                 .AsTableServiceQuery<Order>()
                 .Where(e => e.PartitionKey == partitionKey && e.RowKey == rowKey)
string partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey);
string rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey);
string combinedFilter = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter);

var query = new TableQuery<Order>().Where(combinedFilter);
var orders = table.ExecuteQuery<Order>(query);
var orders=serviceContext
.CreateQuery(表名)
.AsTableServiceQuery()
.Where(e=>e.PartitionKey==PartitionKey&&e.RowKey==RowKey)
查询新的存储客户端库2.0类:

var orders = serviceContext
                 .CreateQuery<Order>(tableName)
                 .AsTableServiceQuery<Order>()
                 .Where(e => e.PartitionKey == partitionKey && e.RowKey == rowKey)
string partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey);
string rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey);
string combinedFilter = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter);

var query = new TableQuery<Order>().Where(combinedFilter);
var orders = table.ExecuteQuery<Order>(query);
string partitionKeyFilter=TableQuery.GenerateFilterCondition(“PartitionKey”,QueryComparisons.Equal,PartitionKey);
字符串rowKeyFilter=TableQuery.GenerateFilterCondition(“RowKey”,QueryComparisons.Equal,RowKey);
string combinedFilter=TableQuery.CombineFilters(partitionKeyFilter、TableOperators.And、rowKeyFilter);
var query=new TableQuery()。其中(combinedFilter);
var orders=table.ExecuteQuery(查询);
如果我错了,请纠正我,但1.7更干净,使用强类型实体,实现IQueryable接口,并利用LINQ的全部功能。2.0版让我感觉自己又在使用ADO.NET数据集了


我完全错过这里的情节了吗?我知道已经有了重大的性能改进,但是为什么2.0版感觉像是API的降级呢?

存储客户机库2.0仍然在不同的名称空间中包含传统的DataServices实现。另一方面,与更新的DataServices实现和以前版本的SDK相比,新的表实现显示出显著的性能改进。根据操作的不同,延迟提高了25%到75%,同时系统资源利用率也显著降低

有关更多信息,请参阅博客文章。正如在博客文章中提到的,如果您喜欢LINQ,您仍然可以使用已迁移到Microsoft.WindowsAzure.Storage.Table.DataServices命名空间的遗留DataServices实现


新表服务层中的IQueryable支持目前正在开发中。目前我们没有任何更具体的时间表细节可供分享。

相关的,2.1 RC包含了表服务层的IQueryable(带有一些非常好的优化),现在可以使用了。看


Joe

如果我的答案不清楚,问题不在于性能,而在于可读性和LINQSorry使用的差异。如果您想使用LINQ,您仍然可以使用2.0中的遗留DataServices实现。我知道DataServices仍然可用,但我想使用新的库,因为它的性能以及未来将更好地支持它。我不明白为什么没有IQueryable支持。也许我应该实现我自己的表达式包装器?新表服务层中的IQueryable支持目前正在开发中。目前我们没有任何更具体的时间线详细信息可供共享。如果您对具有更清晰界面的其他开源表存储客户端开放,请访问我的项目。也有一些额外的功能,如阵列和大数据支持。谢谢-将看看。