我有四种自定义数据类型,每种类型都扩展了ITableEntity
,这是WindowsAzure.Storage
包的一部分。
现在,我有四种从Azure表存储下载数据的方法。每个遵循以下格式:
public List<MyCustomEntity> DownloadMyCustomEntities(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<MyCustomEntity> query = new TableQuery<MyCustomEntity>();
return new List<MyCustomEntity>(table.ExecuteQuery(query));
}
我没有为每个自定义实体类型都使用这些方法之一,而是尝试创建一个共享函数。我希望这是可能的,因为我所有的自定义类型都继承自ITableEntity
。
这是我尝试过的:
public List<TableEntity> DownloadAnyEntity(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<TableEntity> query = new TableQuery<TableEntity>();
return new List<TableEntity>(table.ExecuteQuery(query));
}
我曾尝试使用TableEntity
和进行此操作ITableEntity
,但始终收到错误消息。因为TableEntity
,我的错误是没有类型转换为我实际需要的类型(当我调用该DownloadAnyEntity
方法时),而我认为它应该是隐式的,因为它是的扩展ITableEntity
。
对于ITableEntity
,我得到一个错误,即ExecuteQuery
输入必须是具有公共无参数构造函数的非抽象类型。我的四个自定义类型都具有公共无参数构造函数。
我觉得我看到的问题更多是与不完全了解继承有关,更多的是与Azure表存储相关。任何指针,不胜感激。
我在很大程度上一直在关注本文档,但是没有针对非特定类型实体下载方法的示例。
您可以使DownloadAnyEntity方法具有类型参数约束的泛型
public List<T> DownloadAnyEntity<T>(string tableId) where T: ITableEntity, new()
{
// Reference the CloudTable object
var tableRef = tableClient.GetTableReference(tableId);
var query = new TableQuery<T>();
return tableRef.ExecuteQuery(query).ToList();
}
然后,可以为从ITableEntity继承并具有公共emtpy构造函数的任何类型调用此方法(ExecuteQuery方法需要一个空的构造方法以创建实体)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句