使用IQueryable扩展方法实现复杂查询条件
生活随笔
收集整理的這篇文章主要介紹了
使用IQueryable扩展方法实现复杂查询条件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題
在業務開發中,經常要處理比較復雜的查詢條件,如下圖:
如果任一輸入有值,則必須作為查詢條件之一。
示例代碼如下:
IQueryable<User>?query?=?repository.GetAll();if(name!=null) {query?=query.Where(p=>p.Name==name); }if(date!=null) {query?=query.Where(p=>p.Date==date); }或者把所有條件放到同一個Where子句中:
IQueryable<User>?query?=?repository.GetAll().Where(p=>(name==null || p.Name==name) && (date==null || p.Date==date));這兩種寫法都不好看,而且當條件更多時也不太容易維護。
解決方式
其實,從上面的示例代碼可以看到,多個Where子句在同一個IQueryable中是可以多次使用的,最后的查詢條件是所有Where子句的交集。
因此,我們可以定義一個擴展方法,根據前提條件是否滿足,再決定是否增加Where子句,代碼如下:
public?static?class?IQueryableExtensions {public?static?IQueryable<T>?Where<T>(this?IQueryable<T>?query,bool?condition,Expression<Func<T,?bool>>?predicate){return?condition??query.Where(predicate):?query;} }使用方法如下:
IQueryable<User>?query?=?repository.GetAll().Where(name!=null,?p=>p.Name==name).Where(date!=null,?p=>p.Date==date);這樣就簡潔明了多了!
結論
如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!
總結
以上是生活随笔為你收集整理的使用IQueryable扩展方法实现复杂查询条件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF实现时间轴(仿Gitee)
- 下一篇: NET问答:null != variab