Dapper.DataRepositories icon indicating copy to clipboard operation
Dapper.DataRepositories copied to clipboard

It is recommended to add a SetLimit extension method that supports custom sql

Open apchenjun opened this issue 4 years ago • 0 comments

It is recommended to add a SetLimit extension method that supports custom sql This is the version of sql server used in my project

`public Task<IEnumerable<TEntity>> GetAllPagedAsync(string customSql, int pageNumber, int itemsPerPage, string orderby, object parameters = null, bool buffered = true)
        {
            string pagedListSql = @$"select * from ({customSql}) pagetable ORDER BY {orderby} OFFSET { (pageNumber - 1) * itemsPerPage  } ROWS FETCH NEXT { itemsPerPage} ROWS only ";
            return Connection.QueryAsync<TEntity>(pagedListSql, param: parameters, transaction: ActiveTransaction, commandTimeout: Timeout);
        }`

I use him like this It should be because I have a very complicated multi-table related query, so I need to support the definition of sql paging query

var sb = new SqlBuilder();
            var builder = sb.AddTemplate(@"select * from (select ROW_NUMBER()over(partition by c.ProcessId order by c.Process_ProcessCode desc) rowId,c.* from(SELECT 
                            ptd.*,
                            p.ProcessCode as Process_ProcessCode,
                            p.ProcessName as Process_ProcessName,
                            p.ProcessDesc as Process_ProcessDesc,
                            p.ProcessNameEnglish,p.ProcessDescEnglish, 
                            p.CarType as Process_CarType,
                            ct.BaseDataValue as Process_CarTypeValue,
                            gv.BaseDataValue as Process_GradeVale,
                            p.SAM as Process_SAM,
                            p.Wages as Process_UnitPrice,
                            p.SingleHourOutput as Process_HourlyOutput,
                            p.CodeType as Process_CodeType,
                            pdt.BaseDataValue as ProductValue,
                            p.grade,p.departmentCode,
                            pat.BaseDataValue as PartValue,dc.BaseDataValue as DepartmentCodeName,p.SourceStyleNumber,ft.FtyCode,ft.FactoryName,p.Description     
                            FROM ProcessTemplateDetail ptd 
                            LEFT JOIN Process p on CONVERT(VARCHAR(50),ptd.ProcessId) = p.Id   
                            left join [dbo].[BaseData] ct on CONVERT(VARCHAR(50),ct.id) = p.cartype   
                            left join [dbo].[BaseData] gv on CONVERT(VARCHAR(50),gv.id) = p.Grade   
                            left join[dbo].[BaseData] pdt on CONVERT(VARCHAR(50),pdt.id) = p.ProductType   
                            left join[dbo].[BaseData] pat on CONVERT(VARCHAR(50),pat.id) = p.PartType   
                            left join[dbo].[BaseData] dc on CONVERT(VARCHAR(50),dc.id) = p.DepartmentCode
                            left join Factory ft on ft.id = p.SourceFactory
                            /**where**/ ) as c) 
                            as AuctionRecords ");

            if (!string.IsNullOrWhiteSpace(query.MenuName))
                sb.Where("ProcessCode like CONCAT('%',@MenuName,'%')", new { query.MenuName });
            if (!string.IsNullOrWhiteSpace(query.Url))
                sb.Where("Url like CONCAT('%',@Url,'%')", new { query.Url });

            var items = await _repository.GetAllPagedAsync(builder.RawSql, query.pageIndex, query.PageSize, query.OrderBy, builder.Parameters);

apchenjun avatar Aug 30 '21 07:08 apchenjun