/// <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); }
/// <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()); }
/// <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()); }
/// <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()); }
/// <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); }