如何仅在Azure表中检索预定义数量的结果

时间:2015-01-19 19:27:05

标签: azure azure-table-storage

我正在尝试执行azure表查询。 我的表(保存日志)有数千行数据,每秒都会填充更多数据。

现在我只有一个分区键,但它不会影响下一个问题。

我怎样才能回来让我们只说100个最新结果。

这是我的实体:

    public MainServerLogEntity(string Message)
    {
        this.PartitionKey = "mainserverlogs";
        this.RowKey = (DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString();
        this.Message = Message;
        this.Date = DateTime.UtcNow;
    }

    public MainServerLogEntity() { }

    public string Message { get; set; }
    public DateTime Date { get; set; }

现在这是我在web api中执行的查询:

    [Route("MainServerLogs")]
    [HttpGet]
    public IEnumerable<MainServerLogEntity> GetMainServerLogs()
    {
        CloudTable table = AzureStorageHelpers.GetWebApiTable(connectionString, "mainserverlogs");
        TableQuery<MainServerLogEntity> query = new TableQuery<MainServerLogEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "mainserverlogs"));

        return table.ExecuteQuery(query);
    }

但问题是我收到很多数据,而且我每隔几秒就要求这个api来更新ui。

我该怎么办?是否有可能在查询中定义我只想要100个第一行? 如果不可能那么我应该使用其他什么技术?

1 个答案:

答案 0 :(得分:1)

尝试在查询上实现.Take(100),如下所示:

[Route("MainServerLogs")]
[HttpGet]
public IEnumerable<MainServerLogEntity> GetMainServerLogs()
{
    CloudTable table = AzureStorageHelpers.GetWebApiTable(connectionString, "mainserverlogs");
    TableQuery<MainServerLogEntity> query = new TableQuery<MainServerLogEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "mainserverlogs")).Take(100);

    return table.ExecuteQuery(query);
}