You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sqlite-pcl查询返回的对象列表中整数grade字段按值替换为对应字符串的问题

整数等级字段转固定展示字符串的实现方案

针对这个没有独立映射表、需要把整型grade字段值替换为对应奖章名称的场景,有两种不需要改动现有数据库结构的可落地方案:

方案1:在SQL查询层直接完成转换

SQLite 原生支持CASE条件分支语法,你可以直接在查询语句中完成值转换,查询返回的结果就是可直接展示的字符串内容,连后续的内存处理步骤都可以省略:

SELECT
  -- 原表中其他需要展示的字段按原有逻辑正常读取
  *,
  -- 对整型grade字段做条件映射
  CASE grade
    WHEN 0 THEN 'Platinum'
    WHEN 1 THEN 'Silver'
    ELSE 'Unknown'
  END AS grade
FROM 目标数据表名

这种方式的适配成本极低,只要把实体类中原先定义为整型的grade字段类型改成字符串,sqlite-pcl 就会自动把转换后的字符串值绑定到对应属性上,不需要额外调整业务逻辑。

方案2:在代码内存层做固定字典映射

如果不想改动原有SQL查询逻辑,也可以在拿到查询结果后,通过静态字典完成值映射,这种方式后续调整等级对应规则时,不需要改动SQL语句,灵活性更高:

  • 先在代码中定义全局可复用的固定映射字典:
    private static readonly Dictionary<int, string> GradeMap = new Dictionary<int, string>
    {
        { 0, "Platinum" },
        { 1, "Silver" }
        // 后续新增等级规则直接在这里追加条目即可
    };
    
  • 遍历sqlite-pcl返回的原始对象列表,逐行完成映射:
    // 假设sqlite-pcl返回的原始结果集为rawQueryList,实体类的整型等级字段为Grade
    var displayList = rawQueryList.Select(item => new GradeDisplayModel
    {
        // 其他原有展示字段直接透传
        RecordId = item.RecordId,
        // 等级字段做值映射,同时对无匹配的异常值做兜底处理
        GradeText = GradeMap.TryGetValue(item.Grade, out var gradeName) ? gradeName : "Unknown"
    }).ToList();
    

实现注意事项

  • 这类固定、极少变动的枚举映射关系,不需要为了它专门建立数据库关联表,额外维护表结构反而会增加不必要的查询开销和维护成本。
  • 映射逻辑一定要增加兜底判断,避免数据库中出现未定义的整数值(比如异常写入的越界值)时直接触发程序异常。

内容的提问来源于stack exchange,提问作者Muhammad Radwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 00:54:03