組合查詢功能實現

2022-05-11 12:54:15 字數 1656 閱讀 5268

這是我的第二篇文章,這是我之前做的erp專案的時候設計實現的。在這個erp系統中,功能比較多,表設計的時候建立了很多業務表。對於一些業務表需要執行很多查詢,客戶要求針對不同的字段進行查詢,基於我們之前的設計,針對不同的查詢條件設計不同的dal方法,通過不同的方法簽名來實現客戶的對於不同條件查詢的要求。但是這種解決方案會讓程式設計師很被動,久而久之整個dal層會顯得很臃腫。

面對這樣的困境,考慮是否可以實現用乙個通用的dal方法來代替所有的不同篩選條件查詢方法,因為這些查詢方法內部的邏輯是一樣的,只有查詢條件不一樣。

組合查詢的意思就是,dal方法不需要知道客戶的具體查詢條件是什麼,就可以向客戶返回乙個結果集。要實現組合查詢需要實現以下幾個步驟:

(1) 建立工具類predicateextensionses

1

public

static

class

predicateextensionses24

5public

static expressionbool>> false() 67

public

static expressionbool>> or(this expressionbool>> exp_flow, expressionbool>>expression2)815

16public

static expressionbool>> and(this expressionbool>> exp_flow, expressionbool>>expression2)

1724 }

predicateextensionses

(2) 將查詢條件封裝成model類

1

public

class

filter24

5public

string filter2 67

public

string filter3

8 }

model

(3) 組合查詢方法

組合查詢的時候,需要對客戶提供的查詢條件做乙個處理,將有效的查詢的條件進行組裝,有效是指string型別的變數不為空或者null、int型別變數值不為0等等。

1

//model是使用linq to sql生成的資料表對應的資料類名

2public

void getresultsbyfilter(filter filter, out ilistresults)312

}1314//

組合查詢條件

15private

void getfiltercondition(filter filter, ref expressionbool>>expr)

1621

if (!string

.isnullorempty(filter.filter2))

2225

if (!string

.isnullorempty(filter.filter3))

26

29 }

getresultsbyfilter

方法簽名中的filter類是自定義篩選條件類,這個根據客戶的查詢要求來定義。model類是資料類,是有ling to sql工具生成的類。查詢得到的結果通過out引用引數返回。

組合查詢的實現

create proc test username char 10 user char 2 useraddress varchar 100 as declare sqlstr varchar 1000 set sqlstr select top 100 from datatable where 1 ...

sql模糊查詢實現組合查詢

資料庫程式設計中經常遇到組合查詢的情況。例如,某公司資料庫裡有一張存放使用者資訊的表user info,它有多個字段 userid,id,name,age,address。其中userid是表的主碼,表示使用者的使用者號,該使用者號對每個使用者都是唯一的 id表示使用者省份證號。此時要對使用者資訊進...

關於組合查詢的實現

示範中心有一項功能是組合查詢,就是在現有資料 例如教師 實驗室 實驗專案 中過濾出感興趣的資料。因為資料的型別比較多,大約有十個,為每種型別都做一套查詢介面和對應的action 很不划算。我打算通過配置檔案的方式,為每個型別的資料都需要對哪些屬性進行過濾進行說明,並且說明每個屬性在介面上表現為文字框...