FuncList.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. using NewLife.Reflection;
  10. using Newtonsoft.Json.Linq;
  11. using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
  12. using Org.BouncyCastle.Asn1.X509.Qualified;
  13. namespace Admin.NET.Core.Service;
  14. /// <summary>
  15. /// 自定义方法
  16. /// </summary>
  17. public class FuncList
  18. {
  19. /// <summary>
  20. /// 字符串相加
  21. /// </summary>
  22. /// <param name="a"></param>
  23. /// <param name="b"></param>
  24. /// <returns></returns>
  25. public string Merge(object a, object b)
  26. {
  27. return a.ToString() + b.ToString();
  28. }
  29. /// <summary>
  30. /// 对象合并
  31. /// </summary>
  32. /// <param name="a"></param>
  33. /// <param name="b"></param>
  34. /// <returns></returns>
  35. public object MergeObj(object a, object b)
  36. {
  37. return new { a, b };
  38. }
  39. /// <summary>
  40. /// 是否包含
  41. /// </summary>
  42. /// <param name="a"></param>
  43. /// <param name="b"></param>
  44. /// <returns></returns>
  45. public bool IsContain(object a, object b)
  46. {
  47. return a.ToString().Split(',').Contains(b);
  48. }
  49. /// <summary>
  50. /// 获取JToken的数据类型,用于SugarParameter里的类型转换
  51. /// </summary>
  52. /// <param name="jToken"></param>
  53. /// <returns></returns>
  54. public static Type GetTypeFromJToken(JToken jToken)
  55. {
  56. JTokenType jTokenType = jToken.Type;
  57. return jTokenType switch
  58. {
  59. JTokenType.Integer => typeof(long),
  60. JTokenType.Float => typeof(decimal),
  61. JTokenType.Boolean => typeof(bool),
  62. JTokenType.Date => typeof(DateTime),
  63. JTokenType.Bytes => typeof(byte),
  64. JTokenType.Guid => typeof(Guid),
  65. JTokenType.TimeSpan => typeof(TimeSpan),
  66. _ => jToken.GetType(),
  67. };
  68. }
  69. /// <summary>
  70. /// 根据jtoken的实际类型来转换SugarParameter,避免全转成字符串
  71. /// </summary>
  72. /// <param name="jToken"></param>
  73. /// <returns></returns>
  74. public static dynamic TransJObjectToSugarPara(JToken jToken)
  75. {
  76. JTokenType jTokenType = jToken.Type;
  77. return jTokenType switch
  78. {
  79. JTokenType.Integer => jToken.ToObject(typeof(long)),
  80. JTokenType.Float => jToken.ToObject(typeof(decimal)),
  81. JTokenType.Boolean => jToken.ToObject(typeof(bool)),
  82. JTokenType.Date => jToken.ToObject(typeof(DateTime)),
  83. JTokenType.Bytes => jToken.ToObject(typeof(byte)),
  84. JTokenType.Guid => jToken.ToObject(typeof(Guid)),
  85. JTokenType.TimeSpan => jToken.ToObject(typeof(TimeSpan)),
  86. JTokenType.Array => TransJArrayToSugarPara(jToken),
  87. _ => jToken
  88. };
  89. }
  90. /// <summary>
  91. /// 根据jArray的实际类型来转换SugarParameter,避免全转成字符串
  92. /// </summary>
  93. /// <param name="jToken"></param>
  94. /// <returns></returns>
  95. public static dynamic TransJArrayToSugarPara(JToken jToken)
  96. {
  97. if (jToken is not JArray) return jToken;
  98. if (jToken.Any())
  99. {
  100. JTokenType jTokenType = jToken.First().Type;
  101. return jTokenType switch
  102. {
  103. JTokenType.Integer => jToken.ToObject<long[]>(),
  104. JTokenType.Float => jToken.ToObject<decimal[]>(),
  105. JTokenType.Boolean => jToken.ToObject<bool[]>(),
  106. JTokenType.Date => jToken.ToObject<DateTime[]>(),
  107. JTokenType.Bytes => jToken.ToObject<byte[]>(),
  108. JTokenType.Guid => jToken.ToObject<Guid[]>(),
  109. JTokenType.TimeSpan => jToken.ToObject<TimeSpan[]>(),
  110. _ => jToken.ToArray()
  111. } ;
  112. }
  113. else return (JArray)jToken;
  114. }
  115. }