自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LINQ模糊查詢應(yīng)用實(shí)例分析

開發(fā) 后端
LINQ模糊查詢是如何做到LINQ to SQL的相關(guān)操作效果呢?我們在實(shí)際開發(fā)中是如何解決這類問題呢?那么本文就向你介紹一個(gè)實(shí)際應(yīng)用的例子,希望對你了解和使用LINQ模糊查詢有所幫助。

LINQ模糊查詢的應(yīng)用是LINQ學(xué)習(xí)的一個(gè)重要部分,lambada的靈活使用使得我們的程序可控性以及簡約性變得很好,那么對于LINQ模糊查詢的學(xué)習(xí)我們會碰到什么問題呢?讓我們來看看具體的一些問題。

LINQ模糊查詢的問題:LINQ TO SQL中的like怎么實(shí)現(xiàn)?

有人說:我用SqlMethods,例:

  1. var query = from c in LQDC.Customers  
  2.  
  3.   where SqlMethods.Like(c.City, "L_n%")  
  4.  
  5. select c;   

可是問題依舊,假如我用的是通用字段模糊查詢呢?例如我一個(gè)下拉列表里有所有的字段名,那么客戶選擇下拉列表是隨機(jī)的,那我不是要

  1. switch(item){   
  2. case "city":   
  3. ...   
  4. break;   
  5. case "name":   
  6. ...   
  7. break;   
  8. }   

有幾個(gè)字段就寫幾個(gè)case。那么有人用LINQ的目的是什么,提高開發(fā)效率,減少開發(fā)時(shí)間,而且LINQ的反射也不是一般人隨便就寫得出來的。

LINQ模糊查詢的解決方案:

LINQ模糊查詢思路1、通過直接執(zhí)行查詢語句

這也是LINQ的老爸估計(jì)想到目前LINQ不完善而專門留下來的絕招:

  1. LinQDataContext LQDC = new LinQDataContext();   
  2.  
  3. LQDC.ExecuteQuery("select * from table where item like %ak47%");   

這里順帶提醒大家%ak47%是會丟失數(shù)據(jù)庫索引的,而ak47%則不會,要怎么解決想想博客,這里就不扯那么遠(yuǎn)啦。

LINQ模糊查詢思路2、調(diào)用存儲過程。

寫好一個(gè)存儲過程,例如名稱叫p_LikeSelect;

  1. ALTER PROCEDURE [dbo].[p_LikeSelect]  
  2.   @tablename nvarchar(255),  
  3.   @columnname nvarchar(255),  
  4.  
  5. @value nvarchar(255)  
  6. AS 
  7. BEGIN 
  8. set nocount on;  
  9. declare @sqlcommand nvarchar(max);  
  10. set @sqlcommand = 'select * from '+  
  11. @tablename+' where.....(后面自己寫啦)  
  12.  
  13. exec sp_executesql @sqlcommand ;  
  14. END 

但是問題又來啦,當(dāng)你把這個(gè)存儲過程通過服務(wù)器資源管理器拖進(jìn)dbml窗口以后,看看里面的返回值,我靠,不管你是左拖還是右拖上拖下拖,反正拖死你還是返回int,NND,你不能智能點(diǎn)嗎?造成的原因是存儲過程結(jié)尾用了exec,但是你要實(shí)現(xiàn)動態(tài)拼接字符串必須用exec,懂的朋友都知道(所以如果你結(jié)尾是select...什么的,它才可以識別出一個(gè)ISingleResult﹤T﹥或IMultipleResults﹤T﹥的返回類型,然后通過屬性修改器把它返回值手動修改成IQueryable﹤Customers﹥這樣才能最終被使用和保存)。

沒辦法,那只好手動強(qiáng)行修改dbml下的linq.designer.cs文件,打開找到

  1.   [Function(Name="dbo.p_LikeSelect")]  
  2.   public int p_TYSelect(  
  3. [Parameter(DbType="NVarChar(255)")]   
  4. string tablename, [Parameter(DbType=  
  5. "NVarChar(255)")] string @columnname.......)  
  6.   {  
  7.    IExecuteResult result = this.ExecuteMethodCall(  
  8. this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),  
  9.  tablename, diskname);  
  10.    return ((int)(result.ReturnValue));  
  11.   }  

把里面所有類型int全部修改成IQueryable﹤Customers﹥?nèi)缦拢?/P>

  1.   [Function(Name="dbo.p_LikeSelect")]  
  2.   public IQueryable﹤Customers﹥ p_TYSelect(  
  3. [Parameter(DbType="NVarChar(255)")]   
  4. string tablename,   
  5. [Parameter(DbType="NVarChar(255)")]   
  6. string @columnname.......)  
  7.   {  
  8.    IExecuteResult result = this.ExecuteMethodCall(  
  9. this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),   
  10. tablename, diskname);  
  11.    return ((IQueryable﹤Customers﹥)  
  12. (result.ReturnValue));  
  13.   }  

嘔,擦了一把汗,可是,神種是喜歡作弄人,當(dāng)你再次修改dbml文件的時(shí)候,所有代碼又被重新覆蓋了,所以目前我最討厭LINQ的另外一個(gè)原因就在此了。真想罵它!這就意味著只要你系統(tǒng)沒有完成你就別想該dbml文件。。。費(fèi)。

LINQ模糊查詢思路3、使用現(xiàn)成的程序

從網(wǎng)上下載了DynamicLibrary.cs或叫Dynamic.cs的,大小越70-80KB左右,using System.Linq.Dynamic; //using一下。ok,開始有搞頭啦。舉個(gè)例子,所有字段item和查詢的值value都可以動態(tài)啦,下面我截取了一段我項(xiàng)目中的使用(寫得不好不要打我呀)

  1. if (selectnum == 0) {  
  2. IQ = LQDC.Transport_Inner;  
  3. else {  
  4. switch (type) {  
  5. case "精確":  
  6. if (itemtype == "tree" || itemtype == "specialtext") {  
  7. IQ = LQDC.Transport_Inner.Where(item + "=@0", value);  
  8. else if (itemtype == "bit") {  
  9. IQ = LQDC.Transport_Inner.Where(  
  10. item + "=@0", Convert.ToBoolean(value));  
  11. else if (itemtype == "text") {  
  12. if (!value.Trim().Equals("")) {  
  13. IQ = LQDC.Transport_Inner.Where(  
  14. item + "=@0"double.Parse(value));  
  15. else {  
  16. IQ = LQDC.Transport_Inner.Where(item + "=null");  
  17. }  
  18. else {  
  19. IQ = LQDC.Transport_Inner.Where(item + "﹥=  
  20. @0 and " + item + "﹤@1", date1.Date, date2.Date);  
  21. }  
  22. break;  
  23. case "模糊":  
  24. StringBuilder sb = new StringBuilder();  
  25. IQ = LQDC.Transport_Inner.Where(@"BackNum.Contains(""000147"")");  
  26. break;  
  27. }  
  28. }  

動態(tài)的內(nèi)容都在“精確”里面的Where里,大家應(yīng)該很容易看懂(還包括動態(tài)時(shí)間的比較)精華在最后“模糊”那,你可以通過查詢LINQ生成的SQL語句得到:

  1. SELECT * FROM [dbo].[Transport_Inner] AS [t0]  
  2.  
  3. WHERE [t0].[BackNum] LIKE @p0   

類似于匹配以000147開頭的或是中間的或是結(jié)尾的,類似%000147%嘿嘿。還有假如用到sql中的new id()這個(gè)隨機(jī)查詢一個(gè)記錄,怎么辦?LINQ中也沒有呀,同樣得用到Dynamic.cs。好了使用起來也很方便,如下,查詢ID﹥5并小于100的隨即5條記錄。

  1. var query =   
  2. LQDC.Transport_Inner.Where(  
  3. "ID﹥@0 and ID﹤@1", 5, 100).Select("new(id)").Take(5)  

當(dāng)然,這只能返回IQueryable而非IQueryable﹤T﹥

原文來自CSDN博客:http://blog.csdn.net/alamiye010/archive/2009/03/02/3950597.aspx

LINQ模糊查詢的相關(guān)內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)LINQ模糊查詢有所幫助。

【編輯推薦】

  1. 淺談LINQ刪除XML節(jié)點(diǎn)
  2. 學(xué)習(xí)LINQ基本操作的一點(diǎn)體會
  3. LINQ刪除記錄實(shí)戰(zhàn)解析
  4. 淺析LINQ嵌套的實(shí)現(xiàn)過程
  5. LINQ嵌套實(shí)戰(zhàn)案例分析
責(zé)任編輯:仲衡 來源: CSDN博客
相關(guān)推薦

2009-09-14 17:10:57

LINQ模糊查詢

2009-09-14 18:06:18

LINQ模糊查詢

2009-09-15 10:46:04

LINQ to SQL

2009-09-14 10:09:26

LINQ查詢結(jié)果

2009-09-15 09:45:23

Linq動態(tài)條件

2009-09-14 18:19:49

LINQ模糊查詢

2009-09-16 10:48:32

LINQ查詢操作

2009-09-14 18:53:27

LINQ查詢

2009-09-16 15:41:45

LINQ查詢XML文檔

2009-09-18 16:46:15

LINQ查詢句法

2009-09-15 14:58:26

Linq查詢本質(zhì)

2009-09-17 17:03:13

LINQ動態(tài)查詢

2009-09-07 20:40:48

LINQ子查詢

2009-09-17 08:47:00

Linq查詢

2009-07-22 11:27:36

iBATIS模糊查詢

2009-09-18 16:32:51

Linq委托實(shí)例化

2009-09-17 13:15:20

LINQ查詢

2009-09-16 10:38:43

LINQ查詢

2009-09-16 10:08:06

LINQ查詢

2009-09-09 16:53:53

LINQ查詢語法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號