AzureCosmosExtensions.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Microsoft.Azure.Cosmos.Table;
  2. using Microsoft.Azure.Cosmos.Table.Queryable;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using System.Linq;
  10. using Azure;
  11. using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
  12. using System.IO;
  13. using TEAMModelOS.SDK.DI;
  14. using System.Diagnostics;
  15. using Azure.Cosmos;
  16. using System.Text.Json;
  17. using System.Net;
  18. using TEAMModelOS.SDK.Context.Exception;
  19. using System.Linq.Expressions;
  20. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  21. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  22. using TEAMModelOS.SDK.Extension;
  23. using TEAMModelOS.SDK.Models;
  24. namespace TEAMModelOS.SDK.DI
  25. {
  26. public static class AzureCosmosExtensions
  27. {
  28. public static double RU(this Response response)
  29. {
  30. try
  31. {
  32. response.Headers.TryGetValue("x-ms-request-charge", out var value);
  33. var ru = Convert.ToDouble(value);
  34. return ru;
  35. }
  36. catch
  37. {
  38. return 0;
  39. }
  40. }
  41. public static string GetContinuationToken(this Response response)
  42. {
  43. try
  44. {
  45. response.Headers.TryGetValue("x-ms-continuation", out var value);
  46. return value;
  47. }
  48. catch
  49. {
  50. return null;
  51. }
  52. }
  53. public static async Task<int> GetCount(this CosmosContainer container, string partitionkey, string queryWhere = "WHERE 1=1")
  54. {
  55. int totalCount = 0;
  56. await foreach (var item in container.GetItemQueryStreamIterator(
  57. queryText: $"SELECT VALUE COUNT(1) From c {queryWhere}",
  58. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(partitionkey), MaxItemCount = -1 }))
  59. {
  60. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  61. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  62. {
  63. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  64. {
  65. totalCount = obj.GetInt32();
  66. }
  67. }
  68. }
  69. return totalCount;
  70. }
  71. }
  72. }