.NETCORE中,对linq查询分页进行封装

以前实现了用sql拼接的方式对查询分页进行了封装后,虽然大部分业务场景都有包含,可是在项目中,一张表中存的可能全都是ID,须要跟其余表关联获得想要的结果,sql语句写的可能会很大段,能不能有更简单的方法呢

在实际代码中,可能使用linq比去写大段的sql更有效率。
使用linq进行查询将面临几个关键问题:前端

1.查询条件如何自动匹配
2.分页如何封装
3.一张表中可能全是基础信息的ID,若是使用linq关联查询,和写大段的sql并不方便多少,如何能够自动将想要的基础信息带出来
目前有一个简单的思路,还待完善,先记录一下
先在SqlRepositorys仓库类中写一下linq的分页sql

public IQueryable<T> SqlQueryAndParameter<T>(IQueryable<T> linqsql,RequestPages pages)
        {
            pages.count = linqsql.Count();
            return linqsql.Skip((pages.pageNum - 1) * pages.pageSize).Take(pages.pageSize);
        }

T中须要定义好查询结果,还须要建一个T的DTO,在DTO中包含其余的信息,如:ID对应的Name信息。借助AutoMapper,定义T=>TDto的对应,对Name信息进行映射时,用T中的ID值从数据库中去出Name数据库

CreateMap<BT_Seller, BT_SellerDto>()
      .ForMember(x=>x.WarehouseName,t=>t.MapFrom(item=>GetStockName(item.WarehouseId)));


        private string GetStockName(int? WarehouseId)
        {
            var istockhelper = (IStockHelper)ServiceInstance.Instance?.GetService(typeof(IStockHelper));
            var stock = istockhelper.GetStcokForStockId(WarehouseId);
            return stock == null ? "" : stock.Warehouse;
        }

这样,在service中只要查询那张想要查询的表,而后经过AutoMapper映射就能够得到须要返回给前端的给用户展现的数据了List了。
目前,问题2,3均可以获得解决,可是问题1,查询条件如何自动匹配的问题尚未太好的办法。就先记录一下吧,等之后再来还技术债app

若是有好的想法,欢迎交流,一块儿成长code

相关文章
相关标签/搜索