1. 链式方法显式转换
通过.Cast<T>方法直接指定目标类型:
var result = _fsql.Select<object>()
    .Where("age > @0", "18")
    .Cast<int>() // 将字符串类型字段显式转为int
    .ToList();
适用场景:动态查询时明确字段类型。
2. SQL函数转换
通过.WithSql或原生SQL调用数据库转换函数:
// SQL Server风格
var users = _fsql.Query("SELECT CONVERT(varchar(10), create_time, 120) AS formatted_time FROM users")
    .ToList<dynamic>();
支持函数包括:
- CAST(age AS BIGINT)
- CONVERT(DATETIME, '2023-01-01', 120)(指定日期格式)
3. 实体类映射配置
在实体类中通过[Column(DbType = "目标类型")]指定字段类型:
public class User {
    [Column(DbType = "decimal(18,2)")]
    public double Salary { get; set; } // 自动映射为decimal类型
}
优势:持久化时自动处理类型转换。
4. 动态类型转换
使用ToList<dynamic>或ToList<ExpandoObject>进行动态处理:
var data = _fsql.Select<User>()
    .ToList<dynamic>()
    .Select(d => (decimal)d.Age); // 运行时类型转换
注意:需处理转换异常(如InvalidCastException)。
5. 全局类型处理器
通过FreeSqlBuilder.UseConnectionString配置全局类型映射:
var fsql = new FreeSqlBuilder()
    .UseConnectionString(DataType.SqlServer, "...")
    .UseMapping(typeof(DecimalToDoubleTypeHandler)) // 自定义类型处理器
    .Build();
自定义处理器示例:
public class DecimalToDoubleTypeHandler : TypeHandler<decimal, double> {
    public override double Deserialize(object value) => Convert.ToDouble(value);
    public override decimal Serialize(double value) => (decimal)value;
}
适用场景:统一处理特定类型转换。
6. Lambda表达式转换
在查询时使用.Select投影转换字段类型:
var query = _fsql.Select<User>()
    .Select(u => new {
        IntId = (int)u.Id, // 显式类型转换
        Date = DateTime.Parse(u.CreateTimeString)
    });
优势:编译时类型检查,避免运行时错误。
7. JSON序列化控制
结合System.Text.Json配置全局转换规则:
services.AddControllers().AddJsonOptions(options => {
    options.JsonSerializerOptions.Converters.Add(new DecimalToStringConverter());
});
自定义转换器示例:
public class DecimalToStringConverter : JsonConverter<decimal> {
    public override decimal Read(ref Utf8JsonReader reader, ...) => decimal.Parse(reader.GetString());
    public override void Write(...) => writer.WriteStringValue(value.ToString());
}
适用场景:API返回时统一格式化数据。
总结对比
| 方法 | 适用阶段 | 优点 | 注意事项 | 
|---|---|---|---|
| 链式 .Cast<T> | 查询时 | 显式控制类型 | 需确保数据库支持转换逻辑 | 
| SQL函数 | 数据库层 | 利用数据库原生性能 | 语法依赖特定数据库 | 
| 实体类映射 | 模型定义 | 全局生效 | 需修改实体类 | 
| 动态类型转换 | 内存处理 | 灵活处理未知结构 | 需异常处理 | 
| 全局类型处理器 | 持久化/查询 | 统一处理复杂转换 | 需提前配置 | 
| Lambda投影转换 | 查询结果处理 | 编译时安全 | 仅限简单类型转换 | 
根据实际场景选择方法,优先推荐链式转换和实体类映射以保证类型安全,动态场景可结合 SQL 函数和 JSON 序列化控制实现灵活处理。
 
 
                     
            
        













 
                    

 
                 
                    