.NETCORE中,對linq查詢分頁進行封裝


之前實現了用sql拼接的方式對查詢分頁進行了封裝后,雖然大部分業務場景都有包含,但是在項目中,一張表中存的可能全都是ID,需要跟其他表關聯得到想要的結果,sql語句寫的可能會很大段,能不能有更簡單的方法呢

在實際代碼中,可能使用linq比去寫大段的sql更有效率。
使用linq進行查詢將面臨幾個關鍵問題:

1.查詢條件如何自動匹配
2.分頁如何封裝
3.一張表中可能全是基礎信息的ID,如果使用linq關聯查詢,和寫大段的sql並不方便多少,如何可以自動將想要的基礎信息帶出來
目前有一個簡單的思路,還待完善,先記錄一下
先在SqlRepositorys倉庫類中寫一下linq的分頁

        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,查詢條件如何自動匹配的問題還沒有太好的辦法。就先記錄一下吧,等以后再來還技術債

如果有好的想法,歡迎交流,一起成長


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM