MAUI中用sqlite-net-pcl获取对象列表遇'type'参数空值错误
解决sqlite-net-pcl查询结果映射问题
错误原因
使用QueryAsync<object>报错的核心原因是:sqlite-net-pcl需要具体的实体类来映射查询返回的数据库字段,object类型没有对应属性,框架无法通过反射完成字段映射,因此抛出类型为空的异常。
解决步骤
1. 创建匹配数据库表的实体模型类
根据你查询的字段(ParamID、ParamValue、DefaultValue、ParamName),创建与数据库列完全匹配的实体类:
public class Parametername { public int ParamID { get; set; } public string ParamValue { get; set; } public string DefaultValue { get; set; } public string ParamName { get; set; } }
注意:字段名需与数据库列名完全一致(SQLite大小写敏感,建议严格匹配),属性类型要对应数据库列的实际类型(比如整数列用
int,文本列用string)。
2. 修改查询方法,使用实体类作为泛型参数
将原方法中的object替换为创建好的实体类,调整返回类型:
public async Task<List<Parametername>> GetParamList() { try { string sqlquery = "select ParamID,ParamValue,DefaultValue, ParamName from Parametername"; return await Database.QueryAsync<Parametername>(sqlquery); } catch (Exception ex) { // 建议返回空列表而非null,避免调用方出现空引用异常 return new List<Parametername>(); } }
3. 动态类型备选方案(不推荐生产环境使用)
如果暂时不想创建实体类,可以使用dynamic类型接收动态结果,但会失去编译时类型检查:
public async Task<List<dynamic>> GetParamList() { try { string sqlquery = "select ParamID,ParamValue,DefaultValue, ParamName from Parametername"; return await Database.QueryAsync(sqlquery); } catch (Exception ex) { return new List<dynamic>(); } }
内容的提问来源于stack exchange,提问作者Sarath
相关产品推荐
相关产品推荐

