SqlSugar支持拉姆达表达式查询,匿名对象参数等,相对还是比较方便好用的。

一.查询列表:

    //查询列表
SqlSugarClient db = SugarContext.GetInstance();
List<teacher> tList = db.Queryable<teacher>().ToList();
Console.WriteLine(tList.Count); var studentDynamic = db.Queryable<student>().ToDynamic();
Console.WriteLine(studentDynamic); string teaJson = db.Queryable<teacher>().ToJson();
Console.WriteLine(teaJson); //Json序列化的DateTime处理
db.SerializerDateFormat = "yyyy年MM月dd日";
string teacher1 = db.Queryable<teacher>().OrderBy("tbirthday desc").Take().ToJson();
string teacher2 = db.Sqlable().From<teacher>("t").SelectToJson(" top 1 *");
string teacher3 = db.SqlQueryJson("select top 1 * from teacher;");
Console.WriteLine(teacher1);
Console.WriteLine(teacher2);
Console.WriteLine(teacher3);
Console.WriteLine(tList.First().tbirthday.Value.ToString("yyyy-MM-dd"));

特别说明:

1、SqlSugar类库中的json序列化使用的.Net自带的“JavaScriptSerializer”

2、其中Date的格式化原理是先生成json,字符串/\/Date(xxxx)\/,将取出总毫秒数再进行转换。更多点击参考

3.源代码中的日期转化不支持1970年以前的时间,但是可以自己修改一下:

           // string pattern = @"\\/Date\((\d+)\)\\/"; //源代码中的正则
string pattern = @"\\/Date\((-*\d+)\)\\/"; //2016-11-22 修改正则

二、常用查询

//查询单条
SqlSugarClient db = SugarContext.GetInstance();
teacher tea1 = db.Queryable<teacher>().Single(t => t.tno == "");//如果查询数据库没有数据,抛出异常
Console.WriteLine(tea1.tname);
//根据主键查询单条
teacher tea2 = db.Queryable<teacher>().InSingle("");//如果查询数据为空,返回null
Console.WriteLine(tea2.ToJsonString());// 输出:null
/***考虑查询为空的情况***/
teacher tea3 = db.Queryable<teacher>().SingleOrDefault(t => t.tno == "");
Console.WriteLine(tea3.ToJsonString());// 输出:null
teacher tea4 = db.Queryable<teacher>()
.Where(q => q.tno == "")
.FirstOrDefault(); //此处扩展方法仿EF First()/FirstOrDefault()
Console.WriteLine(tea4.ToJsonString()); // 输出:null /*****常用查询******/
//1.判断是否存在
bool exists1 = db.Queryable<teacher>().Any(q => q.tno == "");
Console.WriteLine(exists1);
//2.模糊查询,含有
List<teacher> contains1 = db.Queryable<teacher>()
.Where(q => q.tname.Contains("李"))
.ToList();
Console.WriteLine(contains1.ToJsonString());
//以xxx结尾
List<teacher> end1 = db.Queryable<teacher>()
.Where(q => q.tname.EndsWith("成"))
.ToList();
Console.WriteLine(end1.ToJsonString());
//3. in关键词查询
string[] idList = new string[] { "", "" };
List<teacher> in1 = db.Queryable<teacher>()
.In(q => q.tno, idList) //如果不支持拉姆达表达式,默认为主键
.ToList();
Console.WriteLine(in1.ToJsonString());
List<teacher> in2 = db.Queryable<teacher>()
.Where(q => idList.Contains(q.tno))
.ToList();
Console.WriteLine(in2.ToJsonString()); /*********汇总查询等***********/
//1.获取总数
int count = db.Queryable<teacher>()
.Where(q => q.tsex == "男")
.Count();
Console.WriteLine("count=" + count);
//2.获取最大值
decimal maxDegree = db.Queryable<score>()
.Where(q => q.cno == "3-105")
.Max(q => q.degree) //此处Max返回的结果为Object需要拆箱
.ObjToDecimal();
Console.WriteLine("maxDegree:" + maxDegree);
//3.获取最小值
decimal minDegree = db.Queryable<score>()
.Where(q => q.cno == "3-105")
.Min(q => q.degree)
.ObjToDecimal();
Console.WriteLine("minDegree:" + minDegree);
//4.平均值
//SqlSugar 不支持 平均值的扩展方法 /***复杂的查询可以使用Sql字符串实现***/
//var list = db.Queryable<InsertTest>().Where("id=@id and name=@name", new { id = 1, name = xxx }).ToList();

三、分页查询:

//分页查询处理
SqlSugarClient db = SugarContext.GetInstance();
//分页方式1
Queryable<teacher> query = db.Queryable<teacher>();
query = query.Where(q => q.tno.StartsWith(""));
//排序
//query = query.OrderBy("tbirthday desc"); //排序说明,如果是倒叙,需要传入排序的sql片段
query = query.OrderBy(q => q.tbirthday); //如果是正序,可以指定拉姆达表达式
int allCount = query.Count();
//分页
//List<teacher> list1 = query.Skip(1).Take(2).ToList();
//或者
List<teacher> list1 = query.ToPageList(, );
Console.WriteLine("list1-count:" + allCount);
Console.WriteLine("list1:" + list1.ToJsonString()); //分页方式2+符合查询 多where是and拼接
Queryable<student> query2 = db.Queryable<student>();
query2 = query2.Where(q => q.ssex == "男");
query2 = query2.Where(q => q.sname.EndsWith("军"));
//排序
query2 = query2.OrderBy(q => q.sbirthday);
int allCount2 = ;
//分页
List<student> list2 = query2.ToPageList(, , ref allCount2);
Console.WriteLine("list2-count:" + allCount2);
Console.WriteLine("list2:" + list2.ToJsonString());

四、汇总查询2

//分组,查询汇总
SqlSugarClient db = SugarContext.GetInstance();
dynamic result1 = db.Queryable<student>()
.GroupBy(q => q.ssex)
.Select("ssex,count(*) Count")
.ToDynamic();
foreach (var item in result1)
{
Console.WriteLine(item.ssex + "----" + item.Count);
} string result2 = db.Queryable<score>()
.GroupBy(q => q.sno)
.Select("sno,isnull(sum(degree),0)")
.ToJson();
Console.WriteLine(result2);

五、关联表查询

static void QueryFive()
{
//关联表查询,筛选等
SqlSugarClient db = SugarContext.GetInstance();
//将结果转换成其他对象
var result = db.Queryable<score>()
.JoinTable<student>((s1, s2) => s1.sno == s2.sno)
.OrderBy(s1 => s1.degree)
.Take()
.Select<score, student, Score_Student>((s1, s2) => new Score_Student
{
sno = s1.sno,
sname = s2.sname,
cno = s1.cno,
degree = s1.degree
}).ToList();
Console.WriteLine(result.ToJsonString());
//输出结果
//[{"sno":"101","sname":"李军","degree":64.0,"cno":"3-105"}] //关联查询
//特别说明:如果指定了关联表代表参数s1,s2,那么在后边的筛选等操作中需要使用表字段的地方,必须使用s1或s2
var result2 = db.Queryable<score>()
.JoinTable<student>((s1, s2) => s1.sno == s2.sno)
.Where(s1 => s1.degree > )
.Where(s1 => s1.degree < )
.ToJson();
Console.WriteLine(result2);
//输出结果:
//[{"sno":"109","cno":"3-245","degree":68.0,
//"sno1":"109","sname":"王芳","ssex":"女","sbirthday":"\/Date(161193600000)\/","class":"95031"}] //获取单个表的投影
//特别说明,如果想获取单个表的投影,需要先将查询结果.ToList(),然后在创建匿名对象
//或者 Select()中使用sql指定列名
var result3 = db.Queryable<student>()
.OrderBy(q => q.sbirthday)
.Take()
.ToList()
.Select(q => new
{
sno = q.sno,
sname = q.sname
});
Console.WriteLine(result3.ToJsonString());
//输出结果:
//[{"sno":"103","sname":"陆军"}] //获取多个表,投影
var result4 = db.Queryable<score>()
.JoinTable<student>((s1, s2) => s1.sno == s2.sno)
.OrderBy(s1 => s1.degree)
.Take()
.Select("s1.*,s2.sname as sname")
.ToJson();
Console.WriteLine(result4);
//输出结果:
//[{"sno":"101","cno":"3-105","degree":64.0,"sname":"李军","row_index":1}]
}
public class Score_Student
{
public string sno { get; set; }
public string sname { get; set; }
public decimal degree { get; set; }
public string cno { get; set; }
}

更多参考:

.Net开源SqlServer ORM框架SqlSugar整理

SqlSugar框架T4模板的使用

SqlSugar常用查询实例-拉姆达表达式的更多相关文章

  1. 如何用拉姆达表达式(Lambda Expressions) 书写左链接查询

    在C#中,如果要实现两个列表的左链接查询,我们的一般用法就是用的linq表达式就是 List<Pet> pets = }, }, } }; List<Pet2> pets2 = ...

  2. EasyUI 之 DataGrid利用用拉姆达表达式实现分页查询

      首先,我们在DataGrid的URL中加上我们要查询的条件:查询用户名不是“呵呵”的所有用户. <div> <table id="dg" class=&quo ...

  3. C#拉姆达(=>)表达式

    前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似 ...

  4. Lambda拉姆达表达式

    拉姆达表达式常用于委托,也就是说拉姆达表达式是匿名函数,简单点就是函数. a => a.Equals("string"); //原形为: (a) => { return ...

  5. 拉姆达表达式(Lambda Expressions)

    上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法

  6. C# 匿名方法和拉姆达表达式

    有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子: internal class SomeData ...

  7. .net 在同步方法中使用拉姆达表达式执行async/await异步操作

    代码如下: static void Main(string[] args) { ((Action)(async () =>{ var data = await HttpHelper.GetOnS ...

  8. (转)拉姆达表达式(Lambda Expressions) =>写法的涵义

      lambdaclass编译器 让我们先看一个简单的拉姆达表达式: x=>x/2 这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值. 通过这个拉姆达表达式,我们可以看到: 这 ...

  9. c# 拉姆达表达式实现List去重

    c# 拉姆达表达式实现List去重 var list = studentlist.OrderByDescending(a => a.CreateDate).ToList(); Console.W ...

随机推荐

  1. bzoj1179

    这种tarjan+dp的水题我竟然还WA了两次,要小心! type link=^node;      node=record        po:longint;        next:link; ...

  2. BZOJ2464: 中山市选[2009]小明的游戏

    2464: 中山市选[2009]小明的游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 280  Solved: 124[Submit][Statu ...

  3. [ZOJ 3622] Magic Number

    Magic Number Time Limit: 2 Seconds      Memory Limit: 32768 KB A positive number y is called magic n ...

  4. 12篇学通C#网络编程

    转自:http://www.cnblogs.com/huangxincheng/archive/2012/01/03/2310779.html 在C#的网络编程中,进程和线程是必备的基础知识,同时也是 ...

  5. 笔记本CPU的型号和类型的区分方法

    笔记本CPU的型号和类型的区分方法: 1.所有笔记本CPU型号后面默认为M,代表移动版. 2.如果M变为H,则代表高性能版本,时钟频率更高,性能强,但功耗更大一点,如I7 4500H. 3.如果M变为 ...

  6. PCB覆铜时的安全距离

    覆铜的安全间距(clearance)一般是布线的安全间距的二倍.但是在没有覆铜之前,为布线而设置好了布线的安全间距,那么在随后的覆铜过程中,覆铜的安全间距也会默认是布线的安全距离.这样与预期的结果不一 ...

  7. SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0

    最近做项目扩展的时候,遇到问题就是将整型转换成指定长度的16进制 刚开始就是直接使用 cast(12 as varbinary(4))但是发现这个不能解决我的问题 所以就上网搜了一下,然后改了改,下面 ...

  8. Bzoj 3343: 教主的魔法 分块,二分

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 364[Submit][Status][Discuss ...

  9. POI2001 金矿

    问题描述 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ,宽度为 W 的区域奖励给他(1 ≤ s , w ...

  10. Yii - 验证和授权(Authentication and Authorization)

    1. 定义身份类 (Defining Identity Class)  为了验证一个用户,我们定义一个有验证逻辑的身份类.这个身份类实现[IUserIdentity] 接口.不同的类可能实现不同的验证 ...