mysql复杂操作,.Net Core+mySqlSugar的一些稍复杂操作

介绍一些我尝试的mysqlSugar的数据库操作

修改密码

var status = db.Update(new { password = user.password }, it => it.username == user.username);

更新数据(防止空值一起更新)

首先封装一个函数(判断是否为空或者数值为0),当然sqlsugar有自己的查询函数,判断值不为空且大于0  SqlFunc.HasNumber(object thisValue)

public void ForeachDisableColumns(T model)

{

Type t=model.GetType();

PropertyInfo[] PropertyList=t.GetProperties();foreach (PropertyInfo item inPropertyList)

{string name =item.Name;object value =item.GetValue(model);if (value == null || value.ToString() == "0")

{

db.AddDisableUpdateColumns(name);//新语法添加禁止更新列

}

}

}

则结合以上函数,更新数据的用法

ForeachDisableColumns(user);

db.Update(user, it => it.userid == user.userid);

批量更新,同样使用上述封装的方法

string strArr = "[{'name':'Kotonami','userid':'1'},{'name':'Akinama','userid':'17'},{'name':'Momozawa','userid':'6'}]";

List newuser = JsonConvert.DeserializeObject>(strArr);//批量更新 数据量小时建议使用大于十条用SqlBulkReplace

foreach (var item innewuser)

{

ForeachDisableColumns(item);

}

db.UpdateRange(newuser);

db.DisableUpdateColumns= null;//清空禁止更新

返回行数

var list5 = db.SqlQuery("select userid from Users limit 0,1").SingleOrDefault();

跨表查询,查询某班级学生的姓名和学号

//方法1

outStr = db.SqlQueryJson("select name from Users,Class where class.stuid = Users.userid and class.classid = '" + newclass.classid + "'");//方法2

outStr = db.Queryable()

.JoinTable((cl, us) => us.userid == cl.stuid)//两表共有的条件on.....

.Where(cl => cl.classid == newclass.classid)//主表的条件where.....

.Select("name,sex")

.ToJson();

三表查询 查询班级名称,该班级的学生姓名和用户id

outStr = db.Queryable()

.JoinTable((cl, us) => cl.stuid ==us.userid)

.JoinTable((cl, mc) => cl.classid ==mc.classid)

.Where(cl=> cl.classid ==newclass.classid)

.Select("name,sex,className")

.ToJson();

批量插入

string strList = "[{'classid':'2','stuid':'2'},{'classid':'2','stuid':'1'},{'classid':'2','stuid':'3'}]";

List cl = JsonConvert.DeserializeObject>(strList);foreach (var item incl)

{try{

db.Insert(item);

outStr= "插入成功!";

}catch(Exception ex)

{

outStr=ex.Message;

}

}

查看学习Math课程的学生的数量和名字

//方法1 但是稍显复杂

outStr = db.Queryable()

.JoinTable((cls, us) => cls.stuid ==us.userid, JoinType.Inner)

.JoinTable((cls, mc) => cls.classid == mc.classid && mc.classType == "Math", JoinType.Inner)

.Select("name").ToJson();//方法2 也不简单

outStr =db.Sqlable()

.From("Class", "cl")

.Join("Users", "us", "cl.stuid", "us.userid", JoinType.Inner)

.Join("MyClass", "mc", "mc.classid", "cl.classid", JoinType.Inner)

.Where("mc.classType = 'Math'")

.SelectToJson("name");//方法3

outStr = db.SqlQueryJson("SELECT name FROM users,class,myclass where users.userid = class.stuid and class.classid = myclass.classid and classType= 'Math'");

分页查询

//这里我创建了一个Page类来接收页面的Index和Size

var pageIndex =pages.pageIndex;var pageSize =pages.pageSize;var totalCount = 0;var page = db.Queryable()

.OrderBy(it=>it.userid)

.ToPageList(pageIndex, pageSize,reftotalCount);int totalpages = totalCount + 1 / pageSize;//保证最后一面即使不满足pagesize也占一面

pages.totalPages = totalpages;

//最后你可以处理成Json返回你要的数据

简单去重

outStr = db.Queryable()

.Select("username,password").GroupBy("username,password").ToJson();//性能优于distinct


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部