使用 SqlSugar 查询带有 json 字符串表的查询方式
方式一:Where 中使用原生 SQL 片段(推荐、最直接)
1 2 3
| var list = db.Queryable<tablemodel>() .Where("jsonresult->>'$.P11' = @p", new SugarParameter("@p", "张三")) .ToList();
|
方式二:WhereIF / 动态拼接场景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static class SqlSugarExtension { public static ISugarQueryable<T> WhereIfSql<T>( this ISugarQueryable<T> query, bool condition, string whereSql, params SugarParameter[] parameters) { return condition ? query.Where(whereSql, parameters) : query; } } var name = "张三"; var list = db.Queryable<tablemodel>() .WhereIF(!string.IsNullOrEmpty(name), "jsonresult->>'$.P11' = @p", new SugarParameter("@p", name)) .ToList();
|
方式三:使用 SqlFunc.MappingColumn 映射为表达式(适合在 Lambda 中混用)
1 2 3
| var list = db.Queryable<LabourRecordXx>() .Where(it => SqlFunc.MappingColumn(it.Jsonresult, "jsonresult->>'$.P11'") == "张三") .ToList();
|
1 2 3 4
| var list = db.Queryable<LabourRecordXx>() .Where("JSON_UNQUOTE(JSON_EXTRACT(jsonresult, '$.P11')) = @p", new SugarParameter("@p", "张三")) .ToList();
|
说明:
方式一最简洁,适合大多数场景,SQL 片段会直接拼入生成的 SQL。
方式三的 MappingColumn 适合需要在 Lambda 表达式树中混合使用原生 SQL 片段的场景,但写法不太直观。
如果 jsonresult 字段类型在实体中是 string,以上方式都可以正常工作;如果是强类型对象,则方式一/二/四更合适。
始终使用参数化查询(SugarParameter),避免 SQL 注入。