簡單多條件動態查詢的實現

2021-09-27 09:03:50 字數 1612 閱讀 4214

今天公司有個專案需要到多個條件查詢的功能,以前兩三個條件的時候就用if去判斷,草草了事,由於這次有5-9個條件不等的情況下,總不能都用if吧,雖說能實現,不過這**看上去也太難看,最重要的是沒有重用性,也不方便修改,網上找了下,五花八門的,要費時間去理解它,還不如自己封裝下,也便於以後的使用:

我前端用的是bui來設計的,所以條件的傳遞方式是get/post,所以這個方法是針對「查詢條件來自get/post方式的」,如果是用伺服器控制項傳的,這種方式是不適合的哦

好了,首先,為了方便儲存每個欄位的鍵值和比較關係,先建立乙個condition類,方便以後操作,**如下:

public

class

condition

//字段值

public

string paramvalue

//操作符

public conditionoperate operation

//查詢所用到的運算操作符

public

enum conditionoperate : byte

}

接著,建立乙個拼接查詢條件的類:

public

static

class

conditionbuilder}}

//陣列元素的順序應該與conditionoperate列舉值順序相同

string operatetype = ;

stringbuilder strwhere = new

stringbuilder();

"1=1 ");

foreach (condition item in

conditions)

return

strwhere.tostring();

}}

這裡,後台直接呼叫

listconditions = new list();

string strwhere = conditionbuilder.getwhere(conditions);

當然,有一些特殊字段需要做特殊處理的話,也可以在呼叫getwhere先處理下。

最後的結果是:

訪問http://localhost:14073/index/getdata?a=a1&b=b1&start=0&limit=10&pageindex=0&field=sendsid&direction=asc&receiver=%e9%83%ad%e4%bc%9f&fromusername=8&fromschoolname=87&smscontent=8&smstype=1&sendstatus=1&starttime=&endtime=&_=1404199763638

得到:1=1 and fromusername = '8' and fromschoolname = '87' and smstype = '1' and smscontent = '8' and sendstatus = '1' and receiver = '郭偉'

本人也是菜鳥,此方法只能用來處理普通的查詢,對於複雜條件查詢的還希望有高手賜教,如果大家有其他好的,也希望能分享下。當然,此方法也不適用於linq和ef,

如果有做過linq和ef動態條件查詢的朋友也希望分享下。謝謝!

Mybatis 多條件動態查詢

例 簡單的乙個查詢 select from student tbl st where st.student name like concat concat 但是此時如果studentname是null或空字串,此語句很可能報錯或查詢結果為空。此時我們使用if動態sql語句先進行判斷,如果值為null...

Jedis 實現多條件查詢

這裡面訪問redis的key和value全部都先序列化了的 public class defaultjedispoolclient return sinter finally public void sadd string key,string.macs finally public void hm...

MS SQL之多條件動態查詢

在網上看到乙個sql server的多條件查詢,感覺很精練,並結合實際的專案,做了乙個帶分頁的儲存過程 create procedure sgetrtableheadp mc 獲取簡歷數目並建立臨時表分頁,帶多條件引數查詢 status varchar 50 city varchar 100 高階查...