linqtosql的多條件動態查詢_第1頁
linqtosql的多條件動態查詢_第2頁
linqtosql的多條件動態查詢_第3頁
linqtosql的多條件動態查詢_第4頁
linqtosql的多條件動態查詢_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、linq to sql 的多條件動態查詢確實是一件頭痛的事情,用表達式樹或反射方法要寫一大堆代碼,有時候想想與其這么復雜,還不如回到手動sql 拼接的年代,但是技術總是向前發展的,終歸還是要在linq 上解決這一問題,無意在網上發現一個還算比較簡單的辦法,分享一下: void showdata() using (dbdatacontext db = new dbdatacontext(database.connectionstring) expressionfunc expr = n = getcondition(n); var _query = db.t_bargins.where(expr

2、.compile().select(b = new b.f_money, b.f_name ); foreach (var item in _query) response.write(item.f_name +   + item.f_money.tostring() + ); / 得到合同金額大于6000, 或合同名稱中包含江華 字的條件private bool getcondition(t_bargin _table) bool _result = false ; decimal _minmoney = 6000 ; if (_minmoney 0) _result |=

3、 _table.f_money = _minmoney; string _name = 江華 ; if (!string.isnullorempty(_name) _result |= _table.f_name.contains(_name); return _result; 借助老外寫的一個擴展表達式的類,可以把上篇中的代碼寫得更優雅這是 predicatebuilder的源文件public static class predicatebuilder public static expressionfunc true () return f = true ; public static e

4、xpressionfunc false () return f = false; publicstatic expressionfunc or (this expressionfunc expr1, expressionfunc expr2) var invokedexpr = expression.invoke (expr2, expr1.parameters.cast (); return expression.lambdafunc (expression.or (expr1.body, invokedexpr), expr1.parameters); publicstatic expre

5、ssionfunc and (this expressionfunc expr1, expressionfunc expr2) var invokedexpr = expression.invoke (expr2, expr1.parameters.cast (); return expression.lambdafunc (expression.and (expr1.body, invokedexpr), expr1.parameters); 下面是使用示例:list getproductsbyand(params string keywords) dbdatacontext db = ne

6、w dbdatacontext(database.connectionstring); iqueryable query = db.products; foreach (string keyword in keywords) string temp = keyword; query = query.where(p = p.description.contains(keyword); / 翻譯后的sql 語句 : /select t0.id, t0.name, t0.description /from dbo.product as t0 /where (t0.description like %

7、手機 %) and (t0.description like %6111%) return query.tolist(); list getproductsbyor(params string keywords) dbdatacontext db = new dbdatacontext(database.connectionstring); var predicate = predicatebuilder.false(); foreach (string keyword in keywords) string temp = keyword; predicate = predicate.or(p

8、 = p.description.contains(temp); var query = db.products.where(predicate); / 翻譯后的sql 語句 : /select t0.id, t0.name, t0.description /from dbo.product as t0 /where (t0.description like %6111%) or (t0.description like %2350%) return query.tolist(); void showdata() /var _products = getproductsbyor(6111, 2

9、350); /repeater1.datasource = _products; /repeater1.databind(); var predicate = predicatebuilder.true(); string _name = 6111; if (! string .isnullorempty(_name) predicate = predicate.and(p = p.name.contains(_name); string _description = 長虹 ; if (! string .isnullorempty(_description) predicate = predicate.and(p = p.description.contains(_description); using (dbdatacontext db =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論