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)
2016 © donet5.comApache Licence 2.0