private static async Task <TableQuerySegment <AnalysisEntity> > GetAsync(HttpRequest req, CloudTable table) { TableContinuationToken token = null; var tokenParam = (string)req.Query["t"]; if (!string.IsNullOrEmpty(tokenParam)) { token = ContinuationToken.Unzip(tokenParam); } var idParam = (string)req.Query["id"]; if (string.IsNullOrEmpty(idParam)) { throw new ArgumentException("id is empty"); } var args = idParam.Split('|'); var partKey = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, args[0]); var rowKey = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, args[1]); var query = new TableQuery <AnalysisEntity> { TakeCount = 10, FilterString = TableQuery.CombineFilters(partKey, TableOperators.And, rowKey) }; return(await table.ExecuteQuerySegmentedAsync(query, token)); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "mythxl/v0.1/contracts")] HttpRequest req, [Table("%Storage:ContractTable%", Connection = "Storage:Connection")] CloudTable table, ILogger log, ExecutionContext context) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); TableContinuationToken token = null; var tokenParam = (string)req.Query["t"]; if (!string.IsNullOrEmpty(tokenParam)) { token = ContinuationToken.Unzip(tokenParam); } var filter = ""; var queryParam = (string)req.Query["q"]; if (!string.IsNullOrEmpty(queryParam)) { filter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, queryParam); } var severityParam = (string)req.Query["s"]; if (!string.IsNullOrEmpty(severityParam)) { var severityFilter = TableQuery.GenerateFilterCondition("Severity", QueryComparisons.Equal, severityParam); filter = string.IsNullOrEmpty(filter) ? severityFilter : TableQuery.CombineFilters(filter, TableOperators.And, severityFilter); } var analysisParam = (string)req.Query["a"]; if (!string.IsNullOrEmpty(analysisParam)) { var analysisFilter = TableQuery.GenerateFilterCondition("AnalysisStatus", QueryComparisons.Equal, analysisParam); filter = string.IsNullOrEmpty(filter) ? analysisFilter : TableQuery.CombineFilters(filter, TableOperators.And, analysisFilter); } var query = new TableQuery <ContractEntity> { TakeCount = 10, FilterString = filter }; var queryResult = await table.ExecuteQuerySegmentedAsync(query, token); // TODO use view model instead of entity from storage return(new OkObjectResult(new { data = queryResult.Results, next = ContinuationToken.Zip(queryResult.ContinuationToken) })); }