C# 学习和使用SlqSugar 三

这篇文章主要是介绍和学习在C#中如何使用SqlSugar,记录一下笔记,感兴趣的可以参考一下,如果写的有什么不对的,欢迎指正

前言

前面两篇文章已经简单介绍了关于SqlSugar的一些创建和使用情况【上一篇地址(学习和使用Sqlsugar 二)。】本文详细记录一下关于SqlSugar的一些简单的查询用法,本文只涉及单表查询。

准备工作

数据库的连接等一些内容前两篇已经写过了,这里就不详细写了,感兴趣的可以去看一下前面两篇文章。这里把我使用的表结构和数据直接放上来。

CREATE TABLE [dbo].[Students](
	[StudentId] [int] IDENTITY(100000,1) NOT NULL,
	[StudentName] [varchar](20) NOT NULL,
	[Gender] [char](2) NOT NULL,
	[Birthday] [smalldatetime] NOT NULL,
	[StudentIdNo] [numeric](18, 0) NOT NULL,
	[CardNo] [varchar](20) NOT NULL,
	[Age] [int] NOT NULL,
	[PhoneNumber] [varchar](50) NULL,
	[StudentAddress] [varchar](500) NULL,
	[ClassId] [int] NOT NULL,
 CONSTRAINT [pk_StudentId] PRIMARY KEY CLUSTERED 
(
	[StudentId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [uq_CardNo] UNIQUE NONCLUSTERED 
(
	[CardNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [uq_StudentIdNo] UNIQUE NONCLUSTERED 
(
	[StudentIdNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Students] ADD  CONSTRAINT [df_StudentAddress]  DEFAULT ('地址不详') FOR [StudentAddress]
GO

ALTER TABLE [dbo].[Students]  WITH CHECK ADD  CONSTRAINT [fk_classId] FOREIGN KEY([ClassId])
REFERENCES [dbo].[StudentClass] ([ClassId])
GO

ALTER TABLE [dbo].[Students] CHECK CONSTRAINT [fk_classId]
GO

ALTER TABLE [dbo].[Students]  WITH CHECK ADD  CONSTRAINT [ck_Age] CHECK  (([Age]>=(18) AND [Age]<=(35)))
GO

ALTER TABLE [dbo].[Students] CHECK CONSTRAINT [ck_Age]
GO

ALTER TABLE [dbo].[Students]  WITH CHECK ADD  CONSTRAINT [ck_StudentIdNo] CHECK  ((len([StudentIdNo])=(18)))
GO

ALTER TABLE [dbo].[Students] CHECK CONSTRAINT [ck_StudentIdNo]
GO

数据的话,10条数据都是编的
在这里插入图片描述

SqlSugar基本查询

1.查询整表的数据
var studentlist = dbCline.Queryable<Students>().ToList();
//select * from Students
foreach (var student in studentlist) 
{
    Console.WriteLine("学号:" + student.StudentId + ",姓名:" + student.StudentName);
}

在这里插入图片描述

2.加WITH(NOLOCK)查询
{
     //查询的时候加了with(nolock)下面两种方式都可以,
     //还有一种方式是通过全局的方式去设置,在创建链接的时候MoreSettings  这个对象有个IsWithNoLockQuery属性,设置为true后默认查询就会带WITH(NOLOCK)
     var studentlist = dbCline.Queryable<Students>().With("WITH(NOLOCK)").ToList();
     //select * from Students WITH(NOLOCK)
     var getAllNoLock = dbCline.Queryable<Students>().With(SqlWith.NoLock).ToList();
    foreach (var student in studentlist) 
    {
        Console.WriteLine("学号:" + student.StudentId + ",姓名:" + student.StudentName);
    }
}

在这里插入图片描述

3.查询一个表里面的某几个字段
var studentlist = dbCline.Queryable<Students>().Select((n) => new { n.StudentId, n.StudentName, n.Age}).ToList();
//select StudentId,StudentName,Age from Students

在这里插入图片描述

4.查询第一条数据
{
    //查询第一行数据 ,如果没有,就返回为null
    //select top 1 * from Students
    var student = dbCline.Queryable<Students>().First();
    Console.WriteLine("学号:" + student.StudentId + ",姓名:" + student.StudentName);

    //查询StudentId>100002
    //select top 1 * from Students where StudentId>100002
    var student1 = dbCline.Queryable<Students>().First(n=>n.StudentId>100002);
    Console.WriteLine("学号:" + student1.StudentId + ",姓名:" + student1.StudentName);
}

在这里插入图片描述

6.查询前几条数据
{
    //查询前5条   select top 5 * from Students
    var student = dbCline.Queryable<Students>().Take(5).ToList();
    Console.WriteLine("条数:" + student.Count);
}

在这里插入图片描述

7.计数count
{
    //查询数据条数   select count(1) from Students
    var count = dbCline.Queryable<Students>().Count();
    Console.WriteLine("条数:" + count);
    //查询数据条数   select count(1) from Students where Age>22
    var count1 = dbCline.Queryable<Students>().Count(n=>n.Age>22);
    Console.WriteLine("条数:" + count1);
}

在这里插入图片描述

8.条件查询where

8.1

{
    //查询班级为1的学生信息
    //select * from Students where ClassId='1'
    var studentlist = dbCline.Queryable<Students>().Where(n=>n.ClassId==1).ToList();

   //查询班级为1的学生信息
   //select * from Students where ClassId='1' and Gender='男'
   var studentlist1 = dbCline.Queryable<Students>().Where(n => n.ClassId == 1&& n.Gender=="男").ToList();
   //查询null     select * from Students where StudentAddress is null
   var studentlist5 = dbCline.Queryable<Students>().Where(n => n.StudentAddress==null).ToList();

}

在这里插入图片描述

8.2模糊查询

{
    //模糊查询
    //select * from Students where StudentAddress like '%不%'
    //如果是'不%',则对应的是StartsWith,如果是'%不' EndsWith
    var studentlist2 = dbCline.Queryable<Students>().Where(n => n.StudentAddress.Contains("不")).ToList();
    var studentlist3 = dbCline.Queryable<Students>().Where(n => n.StudentAddress.StartsWith("不")).ToList();
    var studentlist4 = dbCline.Queryable<Students>().Where(n => n.StudentAddress.EndsWith("不")).ToList();
}

在这里插入图片描述

9.判断是否存在Any
{
    //判断是否存在数据,   SELECT 1 FROM [Students]  WHERE ( [Age] > @25 )   下面两种方式都可以
    var studentlist = dbCline.Queryable<Students>().Where(n => n.Age > 25).Any();   //false
    Console.WriteLine("是否存在年龄》25岁的:" + studentlist);
    var studentlist1 = dbCline.Queryable<Students>().Any(n => n.Age > 24);  //true
    Console.WriteLine("是否存在年龄》24岁的:" + studentlist1);
}

在这里插入图片描述

10.in
{
    //查询1,2班的数据
    //SELECT [StudentId],[StudentName],[Gender],[Birthday],[StudentIdNo],[CardNo],[Age],[PhoneNumber],[StudentAddress],[ClassId] FROM [Students]  WHERE  ([ClassId] IN (1,2))
    int[] classids = new int[] { 1, 2 };//班级代码
    var studentlist1 = dbCline.Queryable<Students>().Where(n => classids.Contains(n.ClassId)).ToList();
    //查询名字叫 "王小虎", "李铭" 的学生信息 通过in方式
    //SELECT [StudentId],[StudentName],[Gender],[Birthday],[StudentIdNo],[CardNo],[Age],[PhoneNumber],[StudentAddress],[ClassId] FROM [Students]  WHERE  ([StudentName] IN ('王小虎','李铭'))
    string[] studentname = new string[] { "王小虎", "李铭" };
    var studentlist2 = dbCline.Queryable<Students>().Where(n => studentname.Contains(n.StudentName)).ToList();
}

在这里插入图片描述

11.动态拼接查询

OrIF和AndIF是条件符合才会拼接进去的

{
    string psex = "男";
    string name = "小";
    var exp = Expressionable.Create<Students>();
    exp.OrIF(!string.IsNullOrWhiteSpace(psex), n =>n.Gender== psex);//.OrIf 是条件成立才会拼接OR  如果psex不为空,则加入这个条件
    exp.OrIF(!string.IsNullOrWhiteSpace(name), n => n.StudentName.Contains(name));
    exp.Or(n => n.StudentAddress.Contains("地址"));//拼接OR
    exp.And(n => n.ClassId==1);//拼接and
    var list = dbCline.Queryable<Students>().Where(exp.ToExpression()).ToList();
    //SELECT [StudentId],[StudentName],[Gender],[Birthday],[StudentIdNo],[CardNo],[Age],[PhoneNumber],[StudentAddress],[ClassId]
    //FROM [Students]  WHERE ((([StudentName] like '%小%') OR ([StudentAddress] like '%地址%') ) AND ( [ClassId] = 1 )) 
}

在这里插入图片描述

12.排序
{
    //SELECT [StudentId],[StudentName],[Gender],[Birthday],[StudentIdNo],[CardNo],[Age],[PhoneNumber],[StudentAddress],[ClassId] FROM [Students] ORDER BY [ClassId] ASC
    var studentlist1 = dbCline.Queryable<Students>().OrderBy(n=>n.ClassId).ToList();//默认是asc升序
    var studentlist2 = dbCline.Queryable<Students>().OrderByDescending(n => n.ClassId).ToList();//desc 降序   OrderBy(n => n.ClassId,OrderByType.Desc) 这种方式也可以设置降序
    dbCline.Queryable<Students>().OrderBy(n => n.ClassId,OrderByType.Desc).ToList();
}

在这里插入图片描述

13.直接用SQL查询
{
    var list=dbCline.Ado.SqlQuery<Students>(@"select  * from Students where StudentName=@name", new { name = "王一二" });
}

在这里插入图片描述

14.WhereIF

这个语句里面那个name的条件不符合,则条件里面就没有加进去

{
    //whereif  前面条件成立的情况下,才会加入这个条件
    string name = "";
    int age = 24;
    var studentlist = dbCline.Queryable<Students>().Where(u => u.ClassId == 1)
    .WhereIF(!string.IsNullOrWhiteSpace(name), u => u.StudentName.Contains(name))
    .WhereIF(age > 0, u => u.Age > age).ToList();
}

在这里插入图片描述
本文讲了一些查询的基础用法,希望对大家有所帮助,之后在会在写一些多表查询,复杂查询的内容。
以上就是本文的全部内容,希望对大家有所帮助.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值