注意: 如果是多表查询用到ViewModel 那么也需要 IsJson特性
就算你的数据库不支持Json类型,sqlsugar也可以让你支持JSON
public class UnitJsonTest { [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } [SqlSugar.SugarColumn(ColumnDataType ="varchar(4000)" /*可以设置类型*/, IsJson = true)]//必填 public Order Order { get; set; }//可以是数组或者JArray JObject public string Name{get;set;} } Db.Insertable(new UnitJsonTest() { Name="json1",Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand(); var list = Db.Queryable<UnitJsonTest>().ToList();
支持JObject JArray ,实体 ,集合等类型
[SugarColumn(IsJson=true)]//添加特性 public List<Order> JsonObj{get;set;}
函数名 | 说明 | 兼容 |
SqlFunc.JsonLike | 模糊查询,兼容所有库,性能一般适合小数据处理 SqlFunc.JsonLike(it.JsonObj,"a") 等于Like '%a%' | 支持所有数据库 |
SqlFunc.JsonField | 注意:大小写要一样 (1)查询Id的值{id:1} SqlFunc.JsonField(it.JsonObj,"id") //返回1 (2)多层级查询,查询id 的值 {obj:{id:"a"}} SqlFunc.JsonField(it.JsonObj,"obj","id") //返回a (3)查询第二个组数[1,2,3] //PostgreSQL SqlFunc.JsonField(it.JsonObj,"2") //返回3 //SqlServer SqlFunc.JsonField(it.JsonObj,"[2]") //MySql SqlFunc.JsonField(it.JsonObj,"arr_obj[2]") (4)查询数组第一个的id 的值 [ {id:1},{id:2}] SqlFunc.JsonField(it.JsonObj,"0","id") //返回 1 | 支持PostgreSQL SqlSugar 5.1.2.23: 支持 SqlServer2017 支持 MySql (只支持字段) |
SqlFunc.JsonParse | 转成JSON类型 | 支持PostgreSQL |
SqlFunc.JsonContainsFieldName | 第一层是否存在id (如果多层级需要结合JsonField) SqlFunc.JsonField("{id:1}","id")//true | 支持PostgreSQL |
SqlFunc.JsonArrayAny(it.Json, "a") 需要升级到:5.1.3.36 | ["a","b","c"] 这种数组里面是否存在字符串 a 注意:如果是数字可以 1或者"1" 都试一下 也就是 [1,2] 参数用int类型 也就是 ["1","2"] 参数用string类型 | 支持PostgreSQL 支持MySql 支持SqlServer(最新版本) |
SqlFunc.JsonListObjectAny(it.json, "Name", "a") 需要升级到:5.1.3.36 | [{"name":"a"},{"name":"b"}] 集合中是否存在 name=a的一项 注意:如果是数字可以 1或者"1" 2种类型参数都试一下 | 支持PostgreSQL 支持MySql 支持SqlServer(最新版本) |
SqlFunc.JsonArrayLength(it.Json) | [1,2,3] 获取数组长度 | 支持PostgreSQL |
例如保存用户的一些附带信息,这个时候不需要额外建表
2016 © donet5.comApache Licence 2.0