如何在C#中获取Azure表存储中的所有行?

如何在C#中获取Azure表存储中的所有行?,c#,azure,nosql,azure-table-storage,azure-tablequery,C#,Azure,Nosql,Azure Table Storage,Azure Tablequery,我正在尝试获取azure表中所有实体的列表 你知道我该怎么写这个查询吗 要回答您的问题,您可以执行以下操作: var acc = new CloudStorageAccount( new StorageCredentials("account name", "account key"), true); var tableClient = acc.CreateCloudTableClient(); var table = tableClient.G

我正在尝试获取azure表中所有实体的列表


你知道我该怎么写这个查询吗

要回答您的问题,您可以执行以下操作:

var acc = new CloudStorageAccount(
                         new StorageCredentials("account name", "account key"), true);
var tableClient = acc.CreateCloudTableClient();
var table = tableClient.GetTableReference("table name");
var entities = table.ExecuteQuery(new TableQuery<MyEntity>()).ToList();

如果您不需要每次都使用所有行,那么通过使用
yield
,按需(惰性地)检索项目会更高效:

public async Task<IEnumerable<T>> GetAll<T>(string tableName) where T : class
{
    var table = this.GetCloudTable(tableName);
    TableContinuationToken token = null;
    do
    {
        var q = new TableQuery<T>();
        var queryResult = await table.ExecuteQuerySegmentedAsync(q, token);
        foreach (var item in queryResult.Results)
        {
            yield return item;
        }
        token = queryResult.ContinuationToken;
    } while (token != null);
}
公共异步任务GetAll(字符串tableName),其中T:class
{
var table=this.GetCloudTable(tableName);
TableContinuationToken=空;
做
{
var q=新的TableQuery();
var queryResult=wait table.ExecuteQuerySegmentedAsync(q,令牌);
foreach(queryResult.Results中的变量项)
{
收益回报项目;
}
token=queryResult.ContinuationToken;
}while(令牌!=null);
}

使用这种方法,您可以获得所有行,但是如果您正在循环通过
GetAll()的结果,并找到您要查找的内容,那么您只需
break
循环和
GetAll()
方法将停止,而不会从表中检索下一行。

您是否使用任何特定于语言的库,例如.Net存储客户端库?我使用的是Microsoft.WindowsAzure.Storage库我只能从中获取PartitionKey和RowKey。为了获得所有属性,必须添加:“var entities=table.ExecuteQuery(new TableQuery()).ToList();”(添加)。这对我来说并不明显:)在这种情况下,MyEntity是我们自己的班级?那么什么是getter或setter呢?对于在两个示例代码的第一行中使用'false'有点困惑-要清楚,您正在主动禁用连接上的HTTPS,对吗?为什么回挂HTTP会有好处?@BrettRigby…你是对的。让流量通过
http
是个坏主意。我已经修好了密码。谢谢你提醒我。
public async Task<IEnumerable<T>> GetAll<T>(string tableName) where T : class
{
    var table = this.GetCloudTable(tableName);
    TableContinuationToken token = null;
    do
    {
        var q = new TableQuery<T>();
        var queryResult = await table.ExecuteQuerySegmentedAsync(q, token);
        foreach (var item in queryResult.Results)
        {
            yield return item;
        }
        token = queryResult.ContinuationToken;
    } while (token != null);
}