使用IQueryable扩展方法实现复杂查询条件
生活随笔
收集整理的這篇文章主要介紹了
使用IQueryable扩展方法实现复杂查询条件
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題
在業(yè)務(wù)開發(fā)中,經(jīng)常要處理比較復(fù)雜的查詢條件,如下圖:
如果任一輸入有值,則必須作為查詢條件之一。
示例代碼如下:
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); }或者把所有條件放到同一個(gè)Where子句中:
IQueryable<User>?query?=?repository.GetAll().Where(p=>(name==null || p.Name==name) && (date==null || p.Date==date));這兩種寫法都不好看,而且當(dāng)條件更多時(shí)也不太容易維護(hù)。
解決方式
其實(shí),從上面的示例代碼可以看到,多個(gè)Where子句在同一個(gè)IQueryable中是可以多次使用的,最后的查詢條件是所有Where子句的交集。
因此,我們可以定義一個(gè)擴(kuò)展方法,根據(jù)前提條件是否滿足,再?zèng)Q定是否增加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);這樣就簡(jiǎn)潔明了多了!
結(jié)論
如果你覺得這篇文章對(duì)你有所啟發(fā),請(qǐng)關(guān)注我的個(gè)人公眾號(hào)”My IO“,記住我!
總結(jié)
以上是生活随笔為你收集整理的使用IQueryable扩展方法实现复杂查询条件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF实现时间轴(仿Gitee)
- 下一篇: 在ASP.NET Core微服务架构下使