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(2).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 == "804");//如果查询数据库没有数据,抛出异常
Console.WriteLine(tea1.tname);
//根据主键查询单条
teacher tea2 = db.Queryable<teacher>().InSingle("814");//如果查询数据为空,返回null
Console.WriteLine(tea2.ToJsonString());// 输出:null
/***考虑查询为空的情况***/
teacher tea3 = db.Queryable<teacher>().SingleOrDefault(t => t.tno == "814");
Console.WriteLine(tea3.ToJsonString());// 输出:null
teacher tea4 = db.Queryable<teacher>().Where(q => q.tno == "814").FirstOrDefault(); //此处扩展方法仿EF First()/FirstOrDefault()
Console.WriteLine(tea4.ToJsonString()); // 输出:null/*****常用查询******/
//1.判断是否存在
bool exists1 = db.Queryable<teacher>().Any(q => q.tno == "814");
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[] { "804", "825" };
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("8"));
//排序
//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(1, 2);
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 = 0;
//分页
List<student> list2 = query2.ToPageList(1, 2, 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(1).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或s2var result2 = db.Queryable<score>().JoinTable<student>((s1, s2) => s1.sno == s2.sno).Where(s1 => s1.degree > 64).Where(s1 => s1.degree < 70).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(1).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(1).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(拉姆达)表达式

    ISO C++ 11 标准的一大亮点是引入Lambda表达式.基本语法如下: [capture list] (parameter list) ->return type { function b ...

  2. C#拉姆达(=)表达式

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

  3. 匿名函数 和 拉姆达表达式

    匿名函数 匿名方法是创建与特定委托实例相关联的未命名代码块的一种方法.可以通过在代码块后面跟上delegate关键字来创建匿名方法. delegate void print();delegate st ...

  4. java1.8 Lambda拉姆达表达式深入探究

    当我们遇到下面情况时: SingleObj.getInstance().setRunnable(new Runnable() {@Overridepublic void run() {} }); 编译 ...

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

    "` "`代码如下: using System; using System.Collections.Generic; using System.Linq; using System ...

  6. 拉姆达表达式学习(2)

    本文转载自:http://www.cnblogs.com/zhouji432600/archive/2010/05/30/1747383.html 在.net3.5里面,委托的定义和实现被大大的简化了 ...

  7. 拉姆达表达式 追加 条件判断 ExpressionFuncT, bool

    拉姆达表达式 追加 条件判断 Expression<Func<T, bool>> 2014/11/13 14:47:59  虫虫飞520   程序员俱乐部   我要评论(0) ...

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

    让我们先看一个简单的拉姆达表达式: x=>x/2 这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值. 通过这个拉姆达表达式,我们可以看到: 这个表达式没有任何类型信息,但这并不 ...

  9. 拉姆达表达式学习(1)

    我曾经遇到一个项目,项目里面需要经常对一系列的同类型集合进行操作,如对集合进行增加元素,删除集合的指定索引的元素等等. 我们可以使用ArrayList来进行.如 1 ArrayList stringL ...

最新文章

  1. php 多线程上传,PHP多线程(pthreads)参数传递学习笔记
  2. 【深度学习】迁移学习理论与实践
  3. BZOJ 2324: [ZJOI2011]营救皮卡丘(带上下限的最小费用最大流)
  4. 作者:李俊清,山东农业大学副教授。
  5. python列表存储乱码_python 列表中文乱码
  6. Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
  7. 转载:C#正则表达式
  8. java中fitlter,068.Python框架Django之DRF视图集使用
  9. ssis组件_使用SSIS Hadoop组件连接到Apache Hive和Apache Pig
  10. 学习: 导航器添加修饰符
  11. Android开发学习之路-LruCache使用和源码分析
  12. 【动态规划笔记】完全背包问题及优化
  13. DSP及海思嵌入式板实现gb28181
  14. python3 print
  15. 日期范围选择类日历(增强版)
  16. Oracle 中文转五笔码
  17. JS生成二维码,以下介绍3种方法
  18. whale 帷幄:数字化营销运营 全渠道数字化精益营销管理平台
  19. Linux下进行rar文件解压和压缩
  20. 解决七彩虹断剑C.A320M-K PRO V14在Win11下前置面板音频接口无法使用的问题

热门文章

  1. [iPhone-Sqlite3]sqlite3_prepare_v2() 不返回 SQLITE_OK,调试
  2. Zabbix3的离线安装
  3. 在Microsoft Word中,Node是如何替代宏的
  4. 《C语言及程序设计》实践参考——分数的累加
  5. JQuery+CSS3实现封装弹出登录框效果
  6. html 标签 中 的Lang 有什么用
  7. 挑战极限--有本事拿.Net+SQL SERVER试试4秒极限!
  8. IA-32系统编程指南 - 第三章 保护模式的内存管理【1】
  9. Bitcoin Unlimited发布BCH新版客户端1.5.0.0,包括CTOR和CDSV
  10. BCH钱包的“现金”支持比特币现金NFC交易