5.x文档地址
http://www.donet5.com/Home/Doc
Demo的Student类定义如下:
class Student
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int ID { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
}注意: Demo使用的是最新的C# 7.2 语法, VS不支持的, 自行修改
说明: Demo大部分都使用了ToList方法, 其实不一定要用ToList方法, 使用ToDataTable, ToPageList, ToJson等等方法都可以, 返回值不同罢了
一: 返回List
var getAll = db.Queryable<Student>().ToList(); /* 生成SQL: SELECT [ID],[Name],[CreateTime] FROM [Student] 其它数据库类似, 不一一列举 */
二: 返回指定列匿名类集合
var data = db.Queryable<Student>()
.Select(f => new
{
f.ID,
f.Name
}).ToList();
/*
生成SQL:
SELECT [ID] AS [ID] , [Name] AS [Name] FROM [Student]
其它数据库类似, 不一一列举
*/三: 返回单个列集合
//返回值为List<string> List<string> data = db.Queryable<Student>().Select(f => f.Name).ToList(); /* 生成SQL: SELECT [Name] FROM [Student] 其它数据库类似, 不一一列举 */
四: 返回指定类集合
List<ResultModel> data = db.Queryable<Student>()
.Select(f => new ResultModel
{
ID = f.ID,
StudentName = f.Name
}).ToList();
/*
生成SQL:
SELECT [ID] AS [ID] , [Name] AS [StudentName] FROM [Student]
其它数据库类似, 不一一列举
*/五: 返回指定类集合升级版(4.9.3)-推荐用法
db.Queryable<Student,School>((st,sc)=>st.SchoolId=sc.Id).Select<ViewModelStudent>().ToList()
//只需要定义一个Model,支持自动填充
public class ViewModelStudent{
public int Id{get;set;}
public string Name{get;set;}
public string SchoolName{get;set;}//取名为 类名+类中属性名
}
//生成的Sql
SELECT
st.[Id],
st.[Name],
sc.[Name] AS SchoolName
FROM Student st,School sc WHERE st.[SchoolId]=sc.[Id]六: 返回JSON字符串
string json = db.Queryable<Student>().ToJson();
七: 多表链接查询返回匿名类集合或指定类集合
var data = db.Queryable<Student, School>((st, sc) => new object[]{ JoinType.Left,st.SchoolId==sc.Id})
.Select((st, sc) => new { Name = st.Name, SchoolId = sc.Id }).ToList();
//或者
List<ResultModel> s4 = db.Queryable<Student, School>((st, sc) => new object[]{ JoinType.Left,st.SchoolId==sc.Id})
.Select((st, sc) => new ResultModel { Name = st.Name, SchoolId = sc.Id }).ToList();
/*
生成的SQL以后再补
注意, 别名要一致, 如Queryable<Student, School>((st, sc), 那么Select((st, sc), 要保持st, sc一致, 否则报错
*/八: 多表链接查询返回DataTable
DataTable dt = db.Queryable<Student, School>((st, sc) => new object[]{ JoinType.Left,st.SchoolId==sc.Id})
.Select((st, sc) => new { Name = st.Name, SchoolId = sc.Id }).ToDataTable();九: 返回DataTable
//注意, 如你使用的是.Net Core版本的SqlSugar, DataTable为SqlSugar自定义的DataTable,不是System.Data.DataTable DataTable dt = db.Queryable<Student>().ToDataTable(); /* 生成SQL: SELECT [ID],[Name],[CreateTime] FROM [Student] 其它数据库类似, 不一一列举 */
十: 查询返回值中调用函数
var data = db.Queryable<Student>()
.Select(f => new
{
f.ID,
f.Name.Trim() //去左右空格, 只支持某些的系统函数, 具体查看http://www.donet5.com/Doc/8/1126
}).ToList();十一: 查询返回字典
List<KeyValuePair<int,string>> data = db.Queryable<Student>().Select<KeyValuePair<int,string>>("ID,Name").ToList();
//data的Key为ID列的值, value为Name列的值十二: 查询, 把表结构返回为字典
var list = db.Queryable<Student>().Select<ExpandoObject>("*").ToList();
foreach (var item in list)
{
Dictionary<string, object> dic = item.ToDictionary(x => x.Key, x => x.Value);
//dic的Key为列的名称, value为列的值
}十三:多表链接查询, 只返回某一个表
List<School> school = db.Queryable<Student,School>((st,sc)=>st.SchoolId=sc.Id).Select((st,sc)=>sc).ToList();
//返回多个表
List<School> school = db.Queryable<Student,School>((st,sc)=>st.SchoolId=sc.Id).Select((st,sc)=>new {st,sc}).ToList();十四: 使用字符串代替Lambda表达进行查询
List<Student> list = db.Queryable<Student>().Select("*").ToList(); //查询所有列, 并返回List<Student>
List<ResultModel> list = db.Queryable<Student>().Select<ResultModel>("ID, Name").ToList(); //查询ID和Name两个列, 并转成List<ResultModel>
/*
ResultModel里面的属性无需和Select方法里面的列名字符串一一对应, 只会映射对应的列和属性
如ResultModel里面只有一个ID属性, 则只会匹配ID, Name不会引发异常
同时, 如果ResultModel里面的属性多, 只会是默认值, 也不会引发异常
*/十五 Mapper功能 是Select的升级版
Mapper是在Select后进行处理所以任何C#方法都支持也更强大多,Select是用来生成SQL,Mappper是在查询结果后进行加工,不需要你去循环二次处理,两者还是有区别的
var s12 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select<ViewModelStudent3>()
.Mapper((it, cache) =>
{
/*用C#处理你想要的结果*/
it.Name = it.Name == null ? "null" : it.Name;
}).ToList();2016 © donet5.comApache Licence 2.0