Linq to sql動(dòng)態(tài)查詢(xún)概述
筆者對(duì)Linq to sql動(dòng)態(tài)查詢(xún)的實(shí)現(xiàn)方法不是很精通,但是筆者一直在鉆研Linq to sql動(dòng)態(tài)查詢(xún),有了一點(diǎn)點(diǎn)收獲,拿出來(lái)和大家分享。
Linq to sql動(dòng)態(tài)查詢(xún)確實(shí)是一件頭痛的事情,用表達(dá)式樹(shù)或反射方法要寫(xiě)一大堆代碼,有時(shí)候想想與其這么復(fù)雜,還不如回到手動(dòng)sql拼接的年代,但是技術(shù)總是向前發(fā)展的,終歸還是要在Linq上解決這一問(wèn)題,無(wú)意在網(wǎng)上發(fā)現(xiàn)一個(gè)還算比較簡(jiǎn)單的辦法,分享一下:
- void ShowData()
- {
- using (DBDataContext db = new DBDataContext(Database.ConnectionString))
- {
- Expression<Func<T_Bargin, bool>> expr = n => GetCondition(n);
- var _query = db.T_Bargins.Where<T_Bargin>(expr.Compile()).
- Select(b => new { b.F_Money, b.F_Name });
- foreach (var item in _query)
- {
- Response.Write(item.F_Name + " " + item.F_Money.ToString() +
- "<br/>");
- }
- }
- }
VB和C#的DynamicQuery例程都包括了一個(gè)輔助庫(kù)的源碼實(shí)現(xiàn),該輔助庫(kù)允許你使用接受字符串參數(shù)(而不是類(lèi)安全的語(yǔ)言運(yùn)算符)的擴(kuò)展方法來(lái)表示LINQ查詢(xún)。你可以把C#或VB的DynamicQuery庫(kù)的實(shí)現(xiàn)拷貝到你自己的項(xiàng)目中,然后在適當(dāng)?shù)牡胤礁鶕?jù)用戶(hù)的輸入用它來(lái)構(gòu)建Linq to sql動(dòng)態(tài)查詢(xún)。
Linq to sql動(dòng)態(tài)查詢(xún)實(shí)現(xiàn)得到合同金額大于6000,或合同名稱(chēng)中包含"應(yīng)"字的條件
- private bool GetCondition(T_Bargin _Table)
- {
- bool _result = false;
- decimal _MinMoney = 6000;
- if (_MinMoney > 0)
- {
- _result |= _Table.F_Money >= _MinMoney;
- }
- string _Name = "江華";
- if (!String.IsNullOrEmpty(_Name))
- {
- _result |= _Table.F_Name.Contains(_Name);
- }
- return _result;
- }
以上就是對(duì)Linq to sql動(dòng)態(tài)查詢(xún)的簡(jiǎn)單介紹。
【編輯推薦】