public async Task<Tuple<List<H_Port>, int>> GetList(CommonPortSearchRequest request) { StringBuilder sbSql = new StringBuilder(); StringBuilder sbCount = new StringBuilder(); DynamicParameters paramters = new DynamicParameters(); string strWhere = GetParameters(request, paramters); List<H_Port> retVals = new List<H_Port>(); if (request.PortIds?.Count > 0) { paramters.Add("@Ids", request.PortIds); string strIds = string.Join(",", request.PortIds.Select(t => $"'{t.ToString()}'")); sbSql.Append(" SELECT p.* from h_ports p where p.IsDeleted = false "); sbSql.Append(strWhere); sbSql.Append($" AND p.id in @Ids ORDER BY FIELD(p.id,{strIds}) "); var list = (await ReadConnection.QueryAsync<H_Port>(sbSql.ToString(), paramters))?.ToList(); int startRow = request.Skip; if (list.Count > startRow) { retVals.AddRange(list.Skip(startRow).Take(request.Count)); //取剩余数据 int remainCount = request.Count - retVals.Count; if (remainCount > 0) { sbSql.Clear(); sbSql.Append(" SELECT p.* from h_ports p where p.IsDeleted = false "); sbSql.Append(strWhere); sbSql.Append($" AND p.id not in @Ids order by p.CreationTime desc limit 0,{remainCount} "); list = (await ReadConnection.QueryAsync<H_Port>(sbSql.ToString(), paramters))?.ToList(); retVals.AddRange(list); } } //如果相等就跳过这些数据 else if (list.Count == startRow) { sbSql.Clear(); sbSql.Append(" SELECT p.* from h_ports p where p.IsDeleted = false "); sbSql.Append(strWhere); sbSql.Append($" AND p.id not in @Ids order by p.CreationTime desc limit 0,{request.Count} "); list = (await ReadConnection.QueryAsync<H_Port>(sbSql.ToString(), paramters))?.ToList(); retVals.AddRange(list); } else { int inCount = list.Count; int needSkip = startRow - inCount; sbSql.Clear(); sbSql.Append(" SELECT p.* from h_ports p where p.IsDeleted = false "); sbSql.Append(strWhere); sbSql.Append($" AND p.id not in @Ids order by p.CreationTime desc limit {needSkip},{request.Count} "); list = (await ReadConnection.QueryAsync<H_Port>(sbSql.ToString(), paramters))?.ToList(); retVals.AddRange(list); } } else { sbSql.Append(" SELECT p.* FROM h_ports p WHERE p.IsDeleted = false "); sbSql.Append(strWhere); sbSql.Append(" ORDER BY p.CreationTime DESC "); //分页 if (request?.Count > 0) { sbSql.Append(" LIMIT " + request.Skip + "," + request.Count); } if (retVals.Count <= 0) { retVals.AddRange(await ReadConnection.QueryAsync<H_Port>(sbSql.ToString(), paramters)); } } sbCount.Append(" SELECT Count(p.Id) FROM h_ports p WHERE p.IsDeleted = false "); sbCount.Append(strWhere); int count = 0; if (request?.Count > 0) { count = await ReadConnection.QueryFirstOrDefaultAsync<int>(sbCount.ToString(), paramters); } return new Tuple<List<H_Port>, int>(retVals, count); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现