Json类型 JSON操作

注意: 如果是多表查询用到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();


JSON函数 5.1.2.8+

支持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

SqlFunc.JsonListObjectAny(it.json, "Name", "a")

需要升级到:5.1.3.36

[{"name":"a"},{"name":"b"}] 集合中是否存在 name=a的一项

注意:如果是数字可以 1或者"1" 2种类型参数都试一下

支持PostgreSQL

支持MySql

SqlFunc.JsonArrayLength(it.Json)[1,2,3] 获取数组长度支持PostgreSQL


使用场景

例如保存用户的一些附带信息,这个时候不需要额外建表



文档:SqlSugar5.0