var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.OrderBy((st,sc)=>st.SchoolId)//写Select前面用法,正常都这么用
.Select((st,sc)=>new Dto(){ id=it.id ,Name=it.Name})
.ToList();特殊用法需要写在Select后面,比如Select中有计算列
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.Select((st,sc)=>new Dto(){ NewNum=st.Num+st.num2,Name=it.Name})
.MergeTable()//需要加上MergeTable对Select后的对象进行排序
.OrderBy(it=>it.NewNum)
.ToList();OrderBy(it=>new { it.Id, name=SqlFunc.Desc(it.Name) }).ToList();
//id asc ,name desc
//也可以多个OrderBy
OrderBy(it=> it.Id).OrderBy(it=> SqlFunc.Desc(it.Name))var list = db.Queryable<Student>().LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id) .OrderBy(st=>st.Id)//升序 .OrderBy((st,sc)=>sc.Id,OrderByType.Desc)//写Select前面,写后面看标题1 .Select<ViewModelStudent>().ToList(); // order by st.id, sc.id desc 多级排序
注意:如果存在Select一定要扔在select前面,不然 st sc别名拿不到
注意:
OrderByPropertyName需要实体查询
OrderBy 都可以
//1.Sql字符串,可以防止低级成本注入,支持自定义重写SQL注入验证StaticConfig.Check_FieldFunc重写这个委托方法就可以
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.OrderBy("st.id asc,sc.Id desc ") //这种就是填SQL你SQL什么样就是什么样 建议看4.2用法
.Select<ViewModelStudent>().ToList();
//技巧可以通过方法转转拿到真实列名:EntityMaintenance.GetDbColumnName<Order>("Id") 100%防注入
//2.属性名排序 ,100%防注入,他会根据类中的名字去验证是否存在,不存在就报错
var list= db.Queryable<Student>().OrderByPropertyName("Id")
.Toist();//有实体才能用这个,没有实体不能用这个
//3.使用合并表排序
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.Select(it=>new {....})
.MergeTable()
.OrderByPropertyName("Id") //100%防注入,这样的好处可以去掉SQL的别名,适合多表排序
.ToList();//新功能推荐
List<OrderByModel> orderList = OrderByModel.Create(
new OrderByModel(){ FieldName="id",OrderByType=OrderByType.Desc},
new OrderByModel(){ FieldName="name"} //默认防注入:并且可以用StaticConfig.Check_FieldFunc重写验证机质
);
var list=db.Queryable<Student>().AS("order").OrderBy(orderList).ToList();
//技巧:获取类中字段名
FieldName=db.EntityMaintenance.GetDbColumnName<Order>("Id");//100%防注入var pageJoin = db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.Select((st, sc) => new {
id = st.Id,
name = sc.Name
})
.MergeTable()//将查询结果集变成表MergeTable
.Where(it => it.id == 1).OrderBy("name asc").ToList();//对表MergeTable进行排序生成的Sql相当于
select *
from
(select st.id as id,sc.name as name from xx join xx on ... ) MergeTable
--多表已经变成了单表
where id=@id
order by ("name asc")所以单条查询是不需要加前缀的,上面的例子把多表转成了单表操作
db.Queryable<Student>().Take(10).OrderBy(st=>SqlFunc.GetRandom()).ToList(); //随机获取数据
OrderByIF(IsOrderBy, it=>it.Id) //当条件IsOrderBy成立.OrderBy才生效
SqlSugar中没有ThenBy 直接写2次OrderBy就行了
db.Queryable<Student>().Take(10).OrderBy(st=>SqlFunc.Desc(it.CreateTime)).ToList(); //order by createtime desc //也可以用这个重载 .OrderBy(it=>it.CreateTime,OrderByType.Desc)
db.Queryable<Student>().OrderBy(st=>SqlFunc.IF(st.type== 1) .Return(st.A) .ElseIF(st.type== 2) .Return(st.B).End(st.C) ).ToList()
2016 © donet5.comApache Licence 2.0