Sql分页

注意:只支持简单查询的Sql不能是存储过程和一些特殊逻的Sql,复杂的Sql和存储过程操作 请看文档 【原生Sql操作


1、查询分页

注意: order by写外面

int total=0;
var list = db.SqlQueryable<Student>("select * from student")
        .Where(it=>it.Id==1)//可以表达式
         .OrderBy("id asc")//也可以SQL
         .ToPageList(1, 2,ref total);

//使用in
var list2= db.SqlQueryable<Student>("select * from  student where id in (@ids)  ").AddParameters(new SugarParameter[] {
            new SugarParameter("@ids", new int[] { 1, 2 })
            })
            .OrderBy("id asc")
            .ToPageList(1,2);

//当我们不需要分页等操作时,请使用db.Ado.SqlQuery,这个功能支持的更全面
var list = db. Ado.SqlQuery<Student>("复杂Sql或者存储过程");


2、结合表达式

var list= db.SqlQueryable<Student>("select * from student").Where(it=>it.Id==1).ToPageList(1, 2);


3、更多用法

var list= db.SqlQueryable<Student>("select * from student").Where("id=@id",new { id=1}).ToPageList(1, 2);

//如果多个参数 new { id=1 , name="xx"} 用逗号隔开


4、添加参数

var list = db.SqlQueryable<Student>("select * from student  where id=@id").AddParameters(new { id=1}).ToPageList(1, 2, ref total);
//如果多个参数 new { id=1 , name="xx"} 用逗号隔开

AddParameters 有很多重载

ISugarQueryable<T> AddParameters(object parameters);

ISugarQueryable<T> AddParameters(SugarParameter[] parameters);

 ISugarQueryable<T> AddParameters(List<SugarParameter> parameters);

5、无实体操作

var list= db.SqlQueryable<object>("select * from student").Where("id=@id",new {id=1 }).ToDataTablePage(1, 2);


6、参数IN用法

 
 var list= db.SqlQueryable<object>("select * from [order] where  id in(@ids)" )
           .AddParameters(new{ids= new int[] { 1,2,3}} )//这儿id需要一个数组
           .ToList()


5、联表多对象映射

和Dapper中的Query<T,T2>效果一样

SQL 规则: 别名.列名  as  [表名.列名]

表达式规则: 如下面2个SELECT用法 别名要一样

   var x= db.SqlQueryable<dynamic>(@"SELECT  
                            [o].[Id] AS [Order.Id] , 
                            [o].[Name] AS [Order.Name] , 
                            [o].[Price] AS [Order.Price] , 
                            [o].[CreateTime] AS [Order.CreateTime] , 
                            [o].[CustomId] AS [Order.CustomId] , 
                            [i].[ItemId] AS [OrderItem.ItemId] , 
                            [i].[OrderId] AS [OrderItem.OrderId] , 
                            [i].[Price] AS [OrderItem.Price] , 
                            [i].[CreateTime] AS [OrderItem.CreateTime]  
                          FROM [Order] o 
                          Inner JOIN [OrderDetail] i 
                          ON ( [o].[Id] = [i].[OrderId] )")
               .Select(it=>new {  o=new Order(),i=new OrderItem()})//设置返回类型
               .Select("*")//让上面一行不生成SQL
               .ToList();
               
//SELECT中的列想动态生成可以用
db.DbMaintenance.GetColumnInfosByTableName(“表名”) //根据表名获取列名集合

image.png


7、存储过程和复杂SQL

https://www.donet5.com/Home/Doc?typeId=1198

文档:SqlSugar5.0