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

Xamarin Forms SQLite查询动态列报错:找不到languagevaluecombine列

解决方案

问题出在计算属性不会被SQLite-net自动映射为数据库列,你用的JsonProperty是给JSON序列化用的,SQLite-net根本不认这个属性,所以数据库里压根没有languagevaluecombine这一列,自然查不到。

给你两种解决思路:

1. 直接在SQL查询中计算组合值

如果你的LanguageValueCombine是基于现有列(比如languagevalue1和languagevalue2)的组合,没必要在模型里搞计算属性,直接在SQL语句里拼接计算就行:

select DISTINCT (languagevalue1 || languagevalue2) as languagevaluecombine from MyWords

这里用||做字符串拼接(SQLite的语法),然后用as给结果起别名,和你原来的属性名对应,这样查询结果就能直接映射到你的模型属性上(如果需要的话)。

2. 将计算属性转为可持久化的列

如果你确实需要把这个组合值存在数据库里,得修改模型:

  • 给属性加上SQLite-net的[Column]特性,指定数据库列名
  • 给属性加一个 backing field,因为SQLite-net需要可读写的属性(纯get的计算属性不会被映射)
  • 确保在插入/更新数据时同步更新这个字段的值

示例代码:

public class MyWords
{
    // 其他普通列,比如:
    public string LanguageValue2 { get; set; }
    public string LanguageValue1 { get; set; }

    private string _languageValueCombine;
    [Column("languagevaluecombine")]
    public string LanguageValueCombine 
    { 
        get => _languageValueCombine ?? $"{LanguageValue1}{LanguageValue2}"; 
        set => _languageValueCombine = value; 
    }

    // 或者在设置其他属性时自动更新:
    private string _languageValue1;
    public string LanguageValue1 
    { 
        get => _languageValue1; 
        set 
        {
            _languageValue1 = value;
            _languageValueCombine = $"{_languageValue1}{LanguageValue2}";
        }
    }
}

改完模型后,记得更新数据库:要么删除旧的数据库文件让程序重新创建,要么手动写迁移脚本修改表结构添加languagevaluecombine列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:25:20