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);
 }
示例#2
0
        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);
        }