Exemple #1
0
        /// <summary>
        /// Get Datas By Keys
        /// FAST
        /// 5W get 5 data and some duplicate get result 4  for 0.26s
        /// </summary>
        /// <param name="tableKeyPairs"></param>
        /// <returns></returns>
        public IEnumerable <T> DatasByPKRKs(params TableKeyPair[] tableKeyPairs)
        {
            //檢查參數是否傳入正確
            if (tableKeyPairs == null)
            {
                throw new ArgumentNullException(nameof(tableKeyPairs));
            }

            foreach (var tkps in tableKeyPairs)
            {
                if (string.IsNullOrEmpty(tkps.RowKey))
                {
                    throw new Exception("RowKey cant be null.");
                }
            }


            tableKeyPairs = tableKeyPairs.GroupBy(x => x.RowKey + "," + x.PartitionKey).Select(g => g.First()).ToArray();

            var res = new ConcurrentList <T>();


            Parallel.ForEach(tableKeyPairs, (tkp) =>
            {
                var obj = DataByPKRK(tkp.RowKey, tkp.PartitionKey);
                if (obj != null)
                {
                    res.Add(obj);
                }
            });

            return(res);
        }
Exemple #2
0
        /// <summary>
        /// 透過 PartitionKey 取得所有Keys
        /// SLOW
        /// 5W datas search 5W rowkeys for 10s
        /// 2018/12/07
        /// </summary>
        /// <param name="partitionKey"></param>
        /// <returns></returns>
        public DTableEntity[] AllDataKeysByPK(string partitionKey = "")
        {
            var res = new ConcurrentList <DTableEntity>();

            var query = new TableQuery <DTableEntity>()
            {
                SelectColumns = new List <string>()
                {
                    "RowKey", "PartitionKey"
                }
            };

            query.FilterString = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey);

            TableContinuationToken continuationToken = null;

            do
            {
                var page = CTable.ExecuteQuerySegmentedAsync(query, continuationToken).Result;
                continuationToken = page.ContinuationToken;
                if (page.Results != null)
                {
                    foreach (var c in page.Results)
                    {
                        res.Add(c);
                    }
                }
            }while (continuationToken != null);

            return(res.ToArray());
        }
Exemple #3
0
        /// <summary>
        /// 取得所有PartitionKeys
        /// FAST
        /// 5W datas for Disdinct 100 PK waste 0.3s
        /// </summary>
        /// <param name="partitionKey"></param>
        /// <returns></returns>
        public string[] AllPKs()
        {
            //var query = new TableQuery<DTableEntity>();
            var res = new ConcurrentList <string>();

            var query = new TableQuery <DTableEntity>()
            {
                SelectColumns = new List <string>()
                {
                    "RowKey", "PartitionKey"
                }
            };

            query.FilterString = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.NotEqual, "");

            TableContinuationToken continuationToken = null;

            do
            {
                var page = CTable.ExecuteQuerySegmentedAsync(query, continuationToken).Result;
                continuationToken = page.ContinuationToken;
                if (page.Results != null)
                {
                    foreach (var c in page.Results)
                    {
                        if (!string.IsNullOrEmpty(c.PartitionKey))
                        {
                            res.Add(c.PartitionKey);
                        }
                    }
                }
            }while (continuationToken != null);

            return(res.Distinct().ToArray());
        }
Exemple #4
0
        /// <summary>
        /// 取得所有Keys
        /// SLOW
        /// 5W dats return 5W keys for 10s
        /// 2018/12/07
        /// </summary>
        public DTableEntity[] AllDataKeys()
        {
            //var query = new TableQuery<DTableEntity>();
            var res = new ConcurrentList <DTableEntity>();

            var query = new TableQuery <DTableEntity>()
            {
                SelectColumns = new List <string>()
                {
                    "RowKey", "PartitionKey"
                }
            };

            TableContinuationToken continuationToken = null;

            do
            {
                var page = CTable.ExecuteQuerySegmentedAsync(query, continuationToken).Result;
                continuationToken = page.ContinuationToken;
                if (page.Results != null)
                {
                    foreach (var c in page.Results)
                    {
                        res.Add(c);
                    }
                }
            }while (continuationToken != null);

            return(res.ToArray());
        }
Exemple #5
0
        /// <summary>
        /// DatasByTableQuery
        /// </summary>
        /// <param name="tableQuery"></param>
        /// <returns></returns>
        public IEnumerable <T> DatasByTableQuery(TableQuery <T> tableQuery)
        {
            var res = new ConcurrentList <T>();

            TableContinuationToken continuationToken = null;

            do
            {
                var page = CTable.ExecuteQuerySegmentedAsync(tableQuery, continuationToken).Result;
                continuationToken = page.ContinuationToken;
                if (page.Results != null)
                {
                    foreach (var obj in page.Results)
                    {
                        res.Add(obj);
                    }
                }
            }while (continuationToken != null);

            return(res);
        }