private SelectStatementResult GetDataForTables(ICollection tables, TablesFilter filter, string queryText) { QueryParameterCollection parameters = new QueryParameterCollection(); List<SelectStatementResult> resultList = new List<SelectStatementResult>(); int paramIndex = 0; int pos = 0; int count = tables.Count; int currentSize = 0; StringCollection inGroup = null; foreach (DBTable table in tables) { if (currentSize == 0) { if (inGroup == null) { inGroup = new StringCollection(); } else { if (inGroup.Count == 0) { resultList.Add(new SelectStatementResult()); } resultList.Add(SelectData(new Query(string.Format(CultureInfo.InvariantCulture, queryText, StringListHelper.DelimitedText(inGroup, ",")), parameters, inGroup))); inGroup.Clear(); parameters.Clear(); } paramIndex = 0; currentSize = (pos < count) ? (count - pos < 15 ? count - pos : 15) : 0; } if (filter == null || filter(table)) { parameters.Add(new OperandValue(ComposeSafeTableName(table.Name))); inGroup.Add(":p" + paramIndex.ToString(CultureInfo.InvariantCulture)); ++paramIndex; --currentSize; } ++pos; } if (inGroup != null && inGroup.Count > 0) { resultList.Add(SelectData(new Query(string.Format(CultureInfo.InvariantCulture, queryText, StringListHelper.DelimitedText(inGroup, ",")), parameters, inGroup))); } if (resultList.Count == 0) return new SelectStatementResult(); if (resultList.Count == 1) return resultList[0]; int fullResultSize = 0; for (int i = 0; i < resultList.Count; i++) { fullResultSize += resultList[i].Rows.Length; } if (fullResultSize == 0) return new SelectStatementResult(); SelectStatementResultRow[] fullResult = new SelectStatementResultRow[fullResultSize]; int copyPos = 0; for (int i = 0; i < resultList.Count; i++) { Array.Copy(resultList[i].Rows, 0, fullResult, copyPos, resultList[i].Rows.Length); copyPos += resultList[i].Rows.Length; } return new SelectStatementResult(fullResult); }
public void QueryEntities() { string storageUri = StorageUri; string accountName = StorageAccountName; string storageAccountKey = PrimaryStorageAccountKey; string tableName = "OfficeSupplies4p1"; string partitionKey = "somePartition"; string rowKey = "1"; string rowKey2 = "2"; var serviceClient = new TableServiceClient( new Uri(storageUri), new TableSharedKeyCredential(accountName, storageAccountKey)); serviceClient.CreateTable(tableName); var tableClient = serviceClient.GetTableClient(tableName); var entity = new TableEntity(partitionKey, rowKey) { { "Product", "Markers" }, { "Price", 5.00 }, { "Quantity", 34 } }; tableClient.AddEntity(entity); var entity2 = new TableEntity(partitionKey, rowKey2) { { "Product", "Planner" }, { "Price", 7.00 }, { "Quantity", 34 } }; tableClient.AddEntity(entity2); #region Snippet:TablesSample4QueryEntitiesFilter Pageable <TableEntity> queryResultsFilter = tableClient.Query <TableEntity>(filter: $"PartitionKey eq '{partitionKey}'"); // Iterate the <see cref="Pageable"> to access all queried entities. foreach (TableEntity qEntity in queryResultsFilter) { Console.WriteLine($"{qEntity.GetString("Product")}: {qEntity.GetDouble("Price")}"); } Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities."); #endregion #region Snippet:TablesSample4QueryEntitiesFilterWithQueryFilter #if SNIPPET // The TablesFilter class is also available to assist with properly formatting odata queries. Pageable <TableEntity> queryResultsFilter = tableClient.Query <TableEntity>(filter: TablesFilter.Create($"PartitionKey eq {partitionKey}")); #else queryResultsFilter = tableClient.Query <TableEntity>(filter: TablesFilter.Create($"PartitionKey eq {partitionKey}")); #endif // Iterate the <see cref="Pageable"> to access all queried entities. foreach (TableEntity qEntity in queryResultsFilter) { Console.WriteLine($"{qEntity.GetString("Product")}: {qEntity.GetDouble("Price")}"); } Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities."); // It handles esca #endregion #region Snippet:TablesSample4QueryEntitiesExpression // Use the <see cref="TableClient"> to query the table using a filter expression. double priceCutOff = 6.00; Pageable <OfficeSupplyEntity> queryResultsLINQ = tableClient.Query <OfficeSupplyEntity>(ent => ent.Price >= priceCutOff); #endregion #region Snippet:TablesSample4QueryEntitiesSelect Pageable <TableEntity> queryResultsSelect = tableClient.Query <TableEntity>(select: new List <string>() { "Product", "Price" }); #endregion #region Snippet:TablesSample4QueryEntitiesMaxPerPage Pageable <TableEntity> queryResultsMaxPerPage = tableClient.Query <TableEntity>(maxPerPage: 10); // Iterate the <see cref="Pageable"> by page. foreach (Page <TableEntity> page in queryResultsMaxPerPage.AsPages()) { Console.WriteLine("This is a new page!"); foreach (TableEntity qEntity in page.Values) { Console.WriteLine($"# of {qEntity.GetString("Product")} inventoried: {qEntity.GetInt32("Quantity")}"); } } #endregion serviceClient.DeleteTable(tableName); }