系列文章目录

第1章 SqlSugar-表到实体、实体到表及库表操作
第2章 SqlSugar增删改操作
第3章 SqlSugar查询操作

文章目录

  • 系列文章目录
  • 一、简单查询
    • 1.1、查询集合
    • 1.2、查询总数
    • 1.3、条件查询
    • 1.4、动态OR查询
    • 1.5、模糊查询
    • 1.6、主键查询
    • 1.7、查第一条
    • 1.8、查前几条
    • 1.9、查询是否有记录
  • 二、连接查询
    • 2.1、准备
    • 2.2、左连接
    • 2.3、右连接
    • 2.4、内连接
  • 三、复杂查询
    • 3.1、分组聚合
    • 3.2、去重
    • 3.3、分页查询

一、简单查询

1.1、查询集合

//select * from StudentInfo
List<StudentInfo> list = db.Queryable<StudentInfo>().ToList();

1.2、查询总数

int count = db.Queryable<StudentInfo>().Count();

1.3、条件查询

List<StudentInfo> studentList;
//按条件查询//select * from StudentInfo where id=1
studentList = db.Queryable<StudentInfo>().Where(it => it.Id == 1).ToList();

多条件查询

{studentList = db.Queryable<StudentInfo>().Where(it => it.Id > 10 && it.Name == "名称_11").ToList();//select * from StudentInfo where id>10 and name='a'studentList = db.Queryable<StudentInfo>().Where(it => it.Id > 10).Where(it => it.Name == "名称_11").ToList();
}

多个字段 条件拼接查询

{List<StudentInfo> OrderList = new List<StudentInfo>(){new StudentInfo{ Id = 1,Name="名称_1"},new StudentInfo{ Id = 2,Name="名称_2"},new StudentInfo{ Id = 3,Name="名称_3"}};Expressionable<StudentInfo> exp = new Expressionable<StudentInfo>();foreach (var item in OrderList){exp.Or(it => it.Id == item.Id && it.Name == item.Name);}//使用构造好的表达式var studentlist = db.Queryable<StudentInfo>().Where(exp.ToExpression()).ToList();
}

1.4、动态OR查询

{Expressionable<StudentInfo> exp = Expressionable.Create<StudentInfo>();string name = "名称_11";//.OrIf 是条件成立才会拼接ORexp.OrIF(!string.IsNullOrWhiteSpace(name), it => it.Name.Contains(name));//拼接ORexp.Or(it => it.Name.Contains("名称_"));studentList = db.Queryable<StudentInfo>().Where(exp.ToExpression()).ToList();
}

1.5、模糊查询

{studentList = db.Queryable<StudentInfo>().Where(it => it.Name.Contains("名称_")).ToList();//select  * from  StudentInfo where name like %名称_%
}

1.6、主键查询

//根据主键查询
{/*单主键查询*///通过主键查询 SingleByIdvar it=db.Queryable<StudentInfo>().InSingle(2);//根据ID查询//select * from StudentInfo where id=2it=db.Queryable<StudentInfo>().Single(it => it.Id == 2);/*多主键查询*/var getAll = db.Queryable<StudentInfo>().WhereClassByPrimaryKey(new StudentInfo() { Id = 123 }).ToList(); //单个实体  getAll = db.Queryable<StudentInfo>().WhereClassByPrimaryKey(new List<StudentInfo>(){new StudentInfo() { Id = 123 },new StudentInfo() { Id = 234 },new StudentInfo() { Id = 345 }}).ToList(); //支持集合
}

1.7、查第一条

//没有返回Null
StudentInfo student = db.Queryable<StudentInfo>().First(it => it.Id == 1);

1.8、查前几条

前10条:

List<StudentInfo> studetntlist = db.Queryable<StudentInfo>().Take(10).ToList();

1.9、查询是否有记录

isExists = db.Queryable<StudentInfo>().Any(it => it.Id > 11);

二、连接查询

2.1、准备

ConnectionConfig connectionConfig = new ConnectionConfig()
{ConnectionString = CustomConnectionConfig.ConnectionString001,IsAutoCloseConnection = true,DbType = DbType.SqlServer
};
using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
{db.CodeFirst.InitTables<Company>();db.CodeFirst.InitTables<User>();db.CodeFirst.InitTables<UserScore>();db.Deleteable<UserScore>().ExecuteCommand();db.Deleteable<Company>().ExecuteCommand();db.Deleteable<User>().ExecuteCommand();List<Company> companyList = new List<Company>();for (int i = 0; i < 3; i++){companyList.Add(new Company(){CreateTime = DateTime.Now,Id = i + 1,CompanyName = $"供热_{i + 1}"});}db.Insertable<Company>(companyList).ExecuteCommand();List<User> userList = new List<User>();List<UserScore> userScoreList = new List<UserScore>();for (int i = 0; i < 10; i++){userList.Add(new User(){CreateTime = DateTime.Now,Id = i + 1,UserName = $"用户_{i + 1}",CompanyId = companyList[0].Id});userScoreList.Add(new UserScore(){UserId = i + 1,Subject = "考勤",Achievement = 90,CreateTime = DateTime.Now});userScoreList.Add(new UserScore(){UserId = i + 1,Subject = "绩效",Achievement = 90,CreateTime = DateTime.Now});userScoreList.Add(new UserScore(){UserId = i + 1,Subject = "项目奖金",Achievement = 89,CreateTime = DateTime.Now});}db.Insertable<User>(userList).ExecuteCommand();db.Insertable<UserScore>(userScoreList).ExecuteCommand();//配置生成sql语句{db.Aop.OnLogExecuting = (s, p) =>{Console.WriteLine("----------------------------");Console.WriteLine($"Sql语句:{s}");};}

2.2、左连接

var query1 = db.Queryable<Company>().LeftJoin<User>((c, u) => c.Id == u.CompanyId).LeftJoin<UserScore>((c, u, us) => u.Id == us.UserId).Where(c => c.Id == 1).Select((c, u, us) => new{CompanyId = c.Id,CompanyName = c.CompanyName,UserNae = u.UserName,Subject = us.Subject,ScoreCoutn = us.Achievement}).ToList();

等价sql:

SELECT  [c].[Id] AS [CompanyId] , [c].[CompanyName] AS [CompanyName] , [u].[UserName] AS [UserNae] , [us].[Subject] AS [Subject] , [us].[Achievement] AS [ScoreCoutn]
FROM [Company] c
Left JOIN [User] u ON ( [c].[Id] = [u].[CompanyId] )
Left JOIN [UserScore] us ON ( [u].[Id] = [us].[UserId] )
WHERE ( [c].[Id] = @Id0 )

2.3、右连接

var query1 = db.Queryable<Company>().RightJoin<User>((c, u) => c.Id == u.CompanyId).RightJoin<UserScore>((c, u, us) => u.Id == us.UserId).Where(c => c.Id == 1).Select((c, u, us) => new{CompanyId = c.Id,CompanyName = c.CompanyName,UserNae = u.UserName,Subject = us.Subject,ScoreCoutn = us.Achievement}).ToList();

等价SQL:

SELECT  [c].[Id] AS [CompanyId] , [c].[CompanyName] AS [CompanyName] , [u].[UserName] AS [UserNae] , [us].[Subject] AS [Subject] , [us].[Achievement] AS [ScoreCoutn]
FROM [Company] c
Right JOIN [User] u ON ( [c].[Id] = [u].[CompanyId] )
Right JOIN [UserScore] us ON ( [u].[Id] = [us].[UserId] )
WHERE ( [c].[Id] = @Id0 )

2.4、内连接

var query1 = db.Queryable<Company>().InnerJoin<User>((c, u) => c.Id == u.CompanyId).InnerJoin<UserScore>((c, u, us) => u.Id == us.UserId).Where(c => c.Id == 1).Select((c, u, us) => new{CompanyId = c.Id,CompanyName = c.CompanyName,UserNae = u.UserName,Subject = us.Subject,ScoreCoutn = us.Achievement}).ToList();
SELECT  [c].[Id] AS [CompanyId] , [c].[CompanyName] AS [CompanyName] , [u].[UserName] AS [UserNae] , [us].[Subject] AS [Subject] , [us].[Achievement] AS [ScoreCoutn]
FROM [Company] c
Inner JOIN [User] u ON ( [c].[Id] = [u].[CompanyId] )
Inner JOIN [UserScore] us ON ( [u].[Id] = [us].[UserId] )
WHERE ( [c].[Id] = @Id0 )

三、复杂查询

3.1、分组聚合

{var list = db.Queryable<Student>().GroupBy(it => new { it.Id, it.Name }).Having(it => SqlFunc.AggregateAvg(it.Id) > 0).Select(it => new{idAvg = SqlFunc.AggregateAvg(it.Id),count = SqlFunc.AggregateCount(it.Id),name = it.Name}).ToList();
}

等价sql:

SELECT  AVG([Id]) AS [idAvg] , COUNT([Id]) AS [count] , [StudentName] AS [name]
FROM [dbstudent] GROUP BY [Id],[StudentName]  HAVING (AVG([Id]) > @Const0 )

3.2、去重

var list = db.Queryable<Student>().Distinct().Select(it => new { it.Name }).ToList();

3.3、分页查询

单表分页

var page = db.Queryable<Student>().ToPageList(pagenumber, pageSize, ref totalCount);
SELECT * FROM (SELECT [Id],[SchoolId],[StudentName],[CreateTime],ROW_NUMBER() OVER( ORDER BY GetDate() ) AS RowIndex  FROM [dbstudent] ) T
WHERE RowIndex BETWEEN 3 AND 4

或:

var page1 = db.Queryable<Student>().ToOffsetPage(pagenumber, pageSize, ref totalCount);
SELECT [Id],[SchoolId],[StudentName],[CreateTime]
FROM [dbstudent]
ORDER BY GETDATE()
OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY

多表分页
如果SqlServer不想有Rownumber可以用 ToOffsetPage 较新版本支持

{int pagenumber = 1; // pagenumber是从1开始的不是从零开始的int pageSize = 20;int totalCount = 0;var list = db.Queryable<Company>().LeftJoin<User>((c, u) => c.Id == u.CompanyId).Select((c, u) => new{Id = c.Id,cName = c.CompanyName,uId = u.Id,uName = u.UserName}).ToOffsetPage(pagenumber, pageSize, ref totalCount);
}
SELECT COUNT(1)
FROM (SELECT  [c].[Id] AS [Id] , [c].[CompanyName] AS [cName] , [u].[Id] AS [uId] , [u].[UserName] AS [uName]  FROM [Company] c Left JOIN [User] u ON ( [c].[Id] = [u].[CompanyId] )  )
CountTable
----------------------------
SELECT  [c].[Id] AS [Id] , [c].[CompanyName] AS [cName] , [u].[Id] AS [uId] , [u].[UserName] AS [uName]
FROM [Company] c
Left JOIN [User] u ON ( [c].[Id] = [u].[CompanyId] )
ORDER BY GETDATE()  OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY

SqlSugar查询操作相关推荐

  1. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  2. Mybatis入门:4(多表查询操作)

    多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...

  3. HBase的安装、写入和查询操作

    实验材料及说明 在Ubuntu系统的/学号(每个人之间的学号)/salesInfo目录下,有买家的购买记录文件Sales,该文件记录了买家的id,购买商品的id以及购买日期,文件为名为Sales.Sa ...

  4. python爬虫 django搜索修改更新数据_一文搞懂Django数据库查询操作

    本文略长,读完约需十分钟.当做复习笔记效果更佳. 查询操作: 数据查询是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时 ...

  5. KD-tree的原理以及构建与查询操作的python实现

    原文地址http://blog.csdn.net/u010551621/article/details/44813299#comments 前几天小组讨论会上展示了kd-tree(k-dimensio ...

  6. MongoDB:mongodb在项目开发时的安全验证、分页查询操作

    MongoDB:mongodb在项目开发时的安全验证.分页查询操作. 对于数据库而言,在项目应用中都需要安全验证,不然,就会报错,呵呵-- 现在贴出来我在项目中是怎么做的. 原创文章,转载请注明出处: ...

  7. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

  8. python获取数据库列名_python sqlite3 查询操作及获取对应查询结果的列名

    记录查询操作及获取查询结果列字段的方法 1.sqlite3 中获取所有表名及各表字段名的操作方法 SQLite 数据库中有一个特殊的表叫 sqlite_master,sqlite_master 的结构 ...

  9. JavaEE之使用DOM4J和XPath对xml文档的添加,删除,查询操作

    程序运行结果如下图: XML文档如下: <?xml version="1.0" encoding="UTF-8"?><exam> < ...

最新文章

  1. javascript实战pdf_javascript该怎么学呢?学习Js之路
  2. [置顶]WebService学习总结(4)——第三方webService服务调用
  3. Web前端岗位面试题汇总(含答案)
  4. 使用ADMT3.2迁移域用户
  5. apache benchmark
  6. linux 卷标设置与管理
  7. 如何下载Discuz
  8. Ionic 学习笔记
  9. Android平台下的ToDoList
  10. 学会这些知识普通人也能财务自由
  11. 随机信号分析基础——例题篇(例题3.4)
  12. python手工打码_Python学习--打码平台
  13. 九、障碍罚函数法---内点、外点罚函数
  14. android视频录制、另一部手机实时观看方案
  15. Android Permission is only granted to system apps问题
  16. Nginx高性能Web服务器实战教程PDF
  17. 电脑D盘格式化了怎么恢复
  18. R语言使用glmnet包拟合lasso-cox回归模型(包含生存时间和结果标签)、使用lasso-cox模型进行特征筛选、使用sapply函数对特征数据进行标准化z-score
  19. 无法右键保存 图片 html,谷歌浏览器不能保存图片怎么办_谷歌浏览器右键不能保存图片的解决方法-系统城...
  20. 如何使用开源CMS建设网站

热门文章

  1. 服务器 关闭系统默认共享,新手们请别随意关闭默认共享
  2. unity+live2d制作galgame框架
  3. 新媒体推广中草根微信营销之路,那些能帮助企业将收益从0到万的实战经验你知道吗?
  4. 算法与数据结构——网易笔试题(一)
  5. 通过Microsoft Store安装的iTunes,手机固件保存位置
  6. 读书笔记-Greenplum企业应用实战:简介
  7. 芜湖方特系统设计书php,芜湖方特东方神画之旅
  8. 如何清除Microsoft Teams的缓存
  9. 国外.edu邮箱,免费.edu教育邮箱申请
  10. HTML、CSS、JS遇到问题记录