2025-05-14 11:33:31 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Extensions;
|
|
|
|
|
|
using JiShe.CollectBus.Common.Helpers;
|
|
|
|
|
|
|
|
|
|
|
|
namespace JiShe.CollectBus.IoTDB.Options
|
2025-04-02 14:06:40 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询条件
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class QueryCondition
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 字段
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Field { get; set; }
|
2025-04-22 16:44:47 +08:00
|
|
|
|
|
2025-04-02 14:06:40 +08:00
|
|
|
|
/// <summary>
|
2025-04-22 16:44:47 +08:00
|
|
|
|
/// 操作符,>,=,<
|
2025-04-02 14:06:40 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Operator { get; set; }
|
2025-04-22 16:44:47 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否数值,如果是数值,则进行数值比较,否则进行字符串比较
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsNumber { get; set; } = false;
|
2025-05-14 11:33:31 +08:00
|
|
|
|
|
|
|
|
|
|
private object _rawValue;
|
2025-04-02 14:06:40 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 值
|
|
|
|
|
|
/// </summary>
|
2025-05-14 11:33:31 +08:00
|
|
|
|
public object Value
|
|
|
|
|
|
{
|
|
|
|
|
|
get => ApplyValueConversion(_rawValue);
|
|
|
|
|
|
set => _rawValue = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 值转换
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="rawValue"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
private object ApplyValueConversion(object rawValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
string declaredTypeName = rawValue.GetType().Name;
|
|
|
|
|
|
|
|
|
|
|
|
Func<object, object> converter = GetQueryConditionValue(declaredTypeName);
|
|
|
|
|
|
return converter(rawValue);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询条件值转换委托
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="declaredTypeName"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
private Func<object, object> GetQueryConditionValue(string declaredTypeName)
|
|
|
|
|
|
{
|
|
|
|
|
|
return declaredTypeName?.ToUpper() switch
|
|
|
|
|
|
{
|
|
|
|
|
|
"DATETIME" => v => v != null ? ((DateTime)v).ToUniversalTime().Ticks : null,
|
|
|
|
|
|
"BOOLEAN" => v => v != null && (bool)v ? 1 : 0,
|
|
|
|
|
|
"STRING" => v => v != null ? $"'{v}'" : "''",
|
|
|
|
|
|
_ => v => v
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-04-02 14:06:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|