Skip to content

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

@apchenjun

Description

@apchenjun

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);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions