簡體   English   中英

如何將具有過濾邏輯的鏈接查詢重構為可重用的方法

[英]How to refactor a link query with filtering logic into a reusable method

我正在使用EF Core來查詢數據庫,並且我的存儲庫類中有幾個類似的查詢,它們基於作為過濾器傳遞的值來過濾結果。

        if (!string.IsNullOrEmpty(queryObj.JobBoard))
            query = query.Where(j => j.JobBoard.JobBoardName.Contains(queryObj.JobBoard));

        if (!string.IsNullOrEmpty(queryObj.Division))
            query = query.Where(j => j.Division.Contains(queryObj.Division));

        if (!string.IsNullOrEmpty(queryObj.City))
            query = query.Where(j => j.City.Contains(queryObj.City));

        if (!string.IsNullOrEmpty(queryObj.State))
            query = query.Where(j => j.State.StateName.Contains(queryObj.State));

是否有實現一個可重用方法的方法,所以我不必在每個領域都重復此步驟? (確切地說有12個字段)。

好吧,我不這么認為,因為在這種情況下,您並不僅僅是在每種情況下都訪問一階對象。 在某些情況下,您要檢查那些對象的屬性。

試試這個。 用&&​​運算符包括所有其他屬性。

query = query.Where(j => 
            string.IsNullOrEmpty(queryObj.JobBoard) ? true : j.JobBoard.JobBoardName.Contains(queryObj.JobBoard)
            && string.IsNullOrEmpty(queryObj.Division) ? true : j.Division.Contains(queryObj.Division)
            && string.IsNullOrEmpty(queryObj.City) ? true : j.City.Contains(queryObj.City)
            && string.IsNullOrEmpty(queryObj.State) ? true : j.State.StateName.Contains(queryObj.State)
            );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM