无实体插入
字典插入(支持多库)
//可以是 Dictionary 或者 List<Dictionary >var dc= new Dictionary<string, object>();dc.Add("name", "1");dc.Add("CreateTime", DateTime.Now);db.Insertable(dc).AS("student").ExecuteCommand();匿名对象插入(支持多库)
db.InsertableByDynamic(new { name="",price=1 }).AS("OrderInfo").ExecuteCommand(); |
BulkCopy
db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);//具体用法 要看文档 https://www.donet5.com/Home/Doc?typeId=2404 |
无实体更新
字典更新 (支持多库)
//字典var dt = new Dictionary<string, object>();dt.Add("id", 1);dt.Add("name", "jack");dt.Add("createTime", DateTime.Now);var t66 = db.Updateable(dt).AS("student").WhereColumns("id").ExecuteCommand();//字典集合var dtList = new List<Dictionary<string, object>>();dtList.Add(dt);dtList.Add(dt2);var t666 = db.Updateable(dtList).AS("student").WhereColumns("id").ExecuteCommand(); |
匿名对象更新(支持多库)
db.InsertableByDynamic(new { id = 1, name = "a" }).AS("order").WhereColumns("id").ExecuteCommand();//sql UPDATE [order] SET[name]=@name WHERE [id]=@id@id:1,@name:a |
SQL方式更新
where条件太灵活可能会有不同数据库不兼容情况
db.Updateable<object>().AS("Order").SetColumns("name", 1).Where("id=1").ExecuteCommand(); |
BulkCopy更新 (需要较新版本)
根据ID为条件更新
db.Fastest<DataTable>().AS("Order").BulkUpdate(datatable, new string[] { "id" }); |
无实体删除
字典删除(支持多库)
//根据字典集合删除 List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;list.Add(字典);db.Deleteable<object>().AS("OrderInfo").WhereColumns(list).ExecuteCommand(); |
拼SQL删除 (不支持多库)
如果存在一些特殊语法不能做到多库兼容
db.Deleteable<object>().AS("OrderInfo").Where("id=@id",new { id=1}).ExecuteCommand();db.Deleteable<object>().AS("OrderInfo").Where("id in (@id) ",new { id=new int[]{1,2,3}}).ExecuteCommand();//批量 |
无实体查询
单表查询
//动态表名 ,动态条件 var list = db.Queryable<dynamic>().AS("order ").Where("id=@id", new { id = 1 }).ToList();//没实体一样用//表名实体 ,动态条件var list = db.Queryable<Order>().Where("id=@id", new { id = 1 }).ToList();//没实体一样用 //除了ToList还支持ToDateTable() |
多表查询
var list2 = db.Queryable<dynamic>("o").AS("order") .AddJoinInfo("OrderDetail", "i", "o.id=i.OrderId") .Where("id=@id", new { id = 1 }) .Select("o.*").ToList(); //除了ToList还支持ToDateTable() |
实体加Sql结合的查询
var list = db.Queryable<Order>().Where("id=@id", new { id = 1 }).ToList(); |
无实体查询(支持多库)
预览版本功能
提前体验可以升级到 5.0.9.2-Preview01版本及以上
什么是低代码操作库?
答:用来兼容多种数据库的弱类型操作数据库语法
使用技巧
可以在这个基础上,封装到XML等配置 ( 自定义XML格式 )
1、所有API(支持多库)
//聚合过滤ISugarQueryable<T> Having(IFuncModel model);//排序ISugarQueryable<T> OrderBy(List<OrderByModel> models);//分组ISugarQueryable<T> GroupBy(List<GroupByModel> models);//查询列ISugarQueryable<T> Select(List<SelectModel> models);//表名ISugarQueryable<T> AS(string tableName);//表名+别名ISugarQueryable<T> AS(string tableName, string shortName);//联表查询ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, IFuncModel models, JoinType type = JoinType.Left);//查询条件ISugarQueryable<T> Where(List<IConditionalModel> conditionalModels);//查询条件外面包一层 ISugarQueryable<T> Where(List<IConditionalModel> conditionalModels,bool isWrap); |
2、联表查询
//方式1:函数实现var list=db.Queryable<object>() .AS("order", "o") .AddJoinInfo("orderdetail", "d", new ObjectFuncModel() { FuncName = "Equals", Parameters = new List<object>{ "d.orderid","o.id" } }, JoinType.Left) .Select(new List<SelectModel>() { new SelectModel() { AsName = "id", FiledName = "o.id" } }) .ToList(); //生成Sql如下 //SELECT //方式2:多个条件 var onList = new ObjectFuncModel() { FuncName = "SqlFunc_Format", Parameters = new List<object>{ "d.orderid",">","o.id","&&","o.id",">","{int}:1" } }; var x = db.Queryable<object>() .AS("order", "o") .AddJoinInfo("orderdetail", "d", onList, JoinType.Left) .Select(selectItems) .ToList();//SELECT //Left JOIN //方式3:简单拼SQL (这种不能兼容多库说白了就是写SQL) AddJoinInfo("table1", "a", "a.id=o.id and a.id>1", JoinType.Left); |
3、Order By
//方式1 多库兼容var orderList = new List<OrderByModel>{ new OrderByModel(){ FieldName="id", OrderByType=OrderByType.Desc}, new OrderByModel(){ FieldName="name", OrderByType=OrderByType.Asc } }; var list=db.Queryable<object>().AS("order").OrderBy(orderList).ToList();//SELECT * FROM //方式2 直接写SQL,不在乎多库兼容可以用var list=db.Queryable<object>().AS("order").OrderBy("id desc,name asc").ToList(); |
4、Group By
//方式1:多库兼容var groupList=new List<GroupByModel> { new GroupByModel(){ FieldName="id" } }; //Sql: var having=new ObjectFuncModel() { //嵌套函数的实现 FuncName= "GreaterThan", Parameters= new List<object> { new ObjectFuncModel(){ FuncName="AggregateAvg", Parameters=new List<object>(){ "ID" } },"{int}:1" } } //Sql: (AVG( var list=db.Queryable<object>().AS("order").GroupBy(groupList) .Having(having) .Select("ID").ToList()//SELECT ID FROM //方式2: 直接写SQLvar list=db.Queryable<object>().AS("order").GroupBy("id") .Having("avg(id)>@p") .AddParameters(new {p=1}) .Select("ID").ToList() |
5、Select用法
//方式1:多库兼容var selector= new List<SelectModel>() { new SelectModel(){AsName = "id1",FiledName = "id"}, new SelectModel(){ FiledName = "id"}}; var list=db.Queryable<object>().AS("order").Select(selector).ToList();//SELECT //方式2:直接写SQLvar list=db.Queryable<object>().AS("order").Select("ID AS id1,id as id").ToList(); |
6、函数
支持的函数大致上和SqlFunc.xxx 相同
new ObjectFuncModel() { //嵌套函数的实现 FuncName= "GreaterThan", Parameters= new List<object> { new ObjectFuncModel(){ FuncName="AggregateAvg", Parameters=new List<object>(){ "ID" } },"{int}:1" } } //Sql: (AVG(//可以使用的地方// 带IFuncModel重载的方法, 比如 Having(IFuncModel model) 和 AddJoinInfo(+4重载)// 带有SelectModel重载方法 new SelectModel(){ FiledName=FuncModel}// 带有OrderByModel重载方法 new OrderByModel(){ FiledName=FuncModel} |
7、Where
7.1 Where构造模式
支持多库 ,也方便构造或者前端序列化 ,手写硬编码逻辑比较吃力,代码量多,适合封装使用
//手动构造var conModels = new List<IConditionalModel>();conModels.Add(new ConditionalModel{ FieldName = "id",ConditionalType=ConditionalType.Equal,FieldValue="1"});conModels.Add(new ConditionalModel{ FieldName = "name",ConditionalType=ConditionalType.Equal,FieldValue="jack"}); //可以设置类型 CSharpTypeName="int" var student = db.Queryable<Student>().Where(conModels).ToList();//select * from Student where id=1 and name = 'jack'//详细用法:https://www.donet5.com/Home/Doc?typeId=2314 |
7.2 Where拼接模式
用起来灵活也支持多库,不方便封装,适合手写
var whereFunc = new ObjectFuncModel() { FuncName = "SqlFunc_Format", Parameters = new List<object>{ "id",">","{int}:1","&&","name","=","{string}:a" } }; db.Queryable<object>().AS("Order").Where(whereFunc).ToList(); //生成的Sql //SELECT * FROM [Order] WHERE [id] > @p0 AND [name] = @p1 参数说明: (1)变量 {string}:a 等于 @p ,new {p=a.ToString()} (2)拼接符号 ">", ">=", "<", "<=", "(", ")", "=", "||", "&&","&","|","null","is","isnot" //like nolike (5.1.3.31-Privew05版本支持) (3)函数 {SqlFunc_AggregateMin:["id"]} (4)字段 不是上面3种就认为是字段(会进行严格SQL注入验证) id 就会变成 "id" 或者 [id] 或者 |
7.3Where简单SQL
用起来简单 对多库兼容差
db.Queryable<object>().AS("Order").Where("id=@id".new {id=1}).ToList(); |