如何在c#中构建一个通用方法来查询给定Azure表中的分区?



我正在尝试构建一个通用方法来返回给定Azure表中分区中的条目。它看起来是这样的:

public class Table : ITable
    {
        private CloudStorageAccount storageAccount;
        public Table()
        {
            var storageAccountSettings = ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"].ToString();
            storageAccount = CloudStorageAccount.Parse(storageAccountSettings);
        }
        public async Task<IEnumerable<T>> RetrieveAllInPartition<T>(string tableReference, string partitionKey) where T : ITableEntity
        {
            var tableClient = storageAccount.CreateCloudTableClient();
            var table = tableClient.GetTableReference(tableReference);
            var query = new TableQuery<T>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey));
            var results = await table.ExecuteQuerySegmentedAsync<T>(query,null);
            return results;
        }
    }

这个不编译,我得到:

CS0310 'T'必须是具有公共无参数的非抽象类型构造函数,以便将其用作泛型中的参数' element '类型或方法
"CloudTable。ExecuteQuerySegmentedAsync (TableQueryTableContinuationToken)

我该如何解决这个问题?

您需要将new()约束添加到您的泛型参数:

public async Task<IEnumerable<T>> RetrieveAllInPartition<T>(string tableReference, string partitionKey) 
    where T : ITableEntity, new()

因为ExecuteQuerySegmentedAsync也有这个约束(可以在文档中看到)。

ExecuteQuerySegmentedAsync需要此约束,否则它将无法为您创建T的实例。有关new()约束的更多信息,请参考文档

相关内容

  • 没有找到相关文章

最新更新