之前實作了用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,查詢條件如何自動匹配的問題還沒有太好的辦法,就先記錄一下吧,等以后再來還技術債
如果有好的想法,歡迎交流,一起成長
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/242638.html
標籤:.NET Core
上一篇:RabbitMQ跟CAP簡單入門
