日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
LINQ動(dòng)態(tài)查詢的實(shí)現(xiàn)淺析

LINQ動(dòng)態(tài)查詢的過程是怎么實(shí)現(xiàn)的呢?我們實(shí)現(xiàn)LINQ動(dòng)態(tài)查詢會(huì)用到還說呢么方法呢?擴(kuò)展庫Dynamic.cs的實(shí)現(xiàn)是什么效果呢?那么讓我們來看看具體的內(nèi)容。

創(chuàng)新互聯(lián)公司客戶idc服務(wù)中心,提供德陽服務(wù)器托管、成都服務(wù)器、成都主機(jī)托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價(jià)的產(chǎn)品以及開放、透明、穩(wěn)定、高性價(jià)比的服務(wù),資深網(wǎng)絡(luò)工程師在機(jī)房提供7*24小時(shí)標(biāo)準(zhǔn)級(jí)技術(shù)保障。

LINQ動(dòng)態(tài)查詢已經(jīng)由微軟提供的一個(gè)LINQ動(dòng)態(tài)查詢擴(kuò)展庫Dynamic.cs實(shí)現(xiàn)(下載地址:http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx,該文件包含在\CSharpSamples\LinqSamples\DynamicQuery目錄下),這個(gè)擴(kuò)展庫支持在Where方法中使用SQL查詢表達(dá)式,這樣我們可以在表示層或業(yè)務(wù)層構(gòu)建SQL條件表達(dá)式,然后交給LINQ查詢,遺憾的是,這個(gè)擴(kuò)展庫不支持SQL中的“Like”運(yùn)算符,沒有模糊查詢功能的查詢怎么能叫查詢呢(拗口……)

事實(shí)上,動(dòng)態(tài)查詢庫是利用Lambda表達(dá)式來實(shí)現(xiàn)動(dòng)態(tài)查詢功能的,因此只要對該擴(kuò)展庫再次進(jìn)行擴(kuò)展,讓它支持LIKE操作符就是,實(shí)現(xiàn)起來并不困難。擴(kuò)展庫的原理是重載擴(kuò)展方法Where,然后對傳入的字符串形式的SQL條件表達(dá)式進(jìn)行分析,最終生成Lambda式。明白這個(gè)原理后,修改起來也就很簡單了。

找到ExpressionParser類,在TokenId枚舉中增加一個(gè)枚舉值:Like,在分析字符串表達(dá)式的方法中加入一個(gè)case條件,用來判斷操作符是否為Like:

LINQ動(dòng)態(tài)查詢實(shí)現(xiàn)實(shí)例:

 
 
 
  1. case 'L':  
  2. case 'l':  
  3. NextChar();  
  4. if (ch == 'I' || ch == 'i')  
  5. {  
  6. NextChar();  
  7. if (ch == 'K' || ch == 'k')  
  8. {  
  9. NextChar();  
  10. if (ch == 'E' || ch == 'e')  
  11. {  
  12. NextChar();  
  13. t = TokenId.Like;  
  14. }  
  15. }  
  16. }  
  17. break; 

需要修改的還有幾個(gè)方法,不再一一細(xì)述,目的都是為了對Like操作符進(jìn)行檢查,并轉(zhuǎn)到查應(yīng)的操作。***增加一個(gè)方法GenerateLike,用來產(chǎn)生支持模糊查詢的Lambda表達(dá)式。代碼如下:

 
 
 
  1. //創(chuàng)建Like表達(dá)式  
  2. Expression GenerateLike(Expression left, Expression right)  
  3. {  
  4. string value = right.ToString().Replace("\"","");  
  5. right = RemovePrecent(value);  
  6. if (value.StartsWith("%") && value.EndsWith("%"))  
  7. {  
  8. MethodInfo method = left.Type.GetMethod("Contains");  
  9. return Expression.Call(left, method, new[] { right });  
  10. }  
  11. else if(value.StartsWith("%"))  
  12. {  
  13. MethodInfo method = left.Type.GetMethod(  
  14. "EndsWith", new[] { typeof(string) });  
  15. return Expression.Call(left, method, new[] { right });  
  16. }  
  17. else if (value.EndsWith("%"))  
  18. {  
  19. MethodInfo method = left.Type.GetMethod(  
  20. "StartsWith", new[] { typeof(string) });  
  21. return Expression.Call(left, method, new[] { right });  
  22. }  
  23.  
  24. return GenerateEqual(left, right);  
  25. }  
  26.  
  27. //去掉查詢字符中的%符號(hào)  
  28. Expression RemovePrecent(string value)  
  29. {  
  30. return Expression.Constant(  
  31. value.Replace("%",String.Empty),  
  32. typeof(string));  
  33. }  

LINQ動(dòng)態(tài)查詢的相關(guān)內(nèi)容就向你介紹到這里,希望那個(gè)對你了解和學(xué)習(xí)LINQ動(dòng)態(tài)查詢有所幫助。

【編輯推薦】

  1. LINQ模糊查詢的學(xué)習(xí)心得淺析
  2. LINQ嵌套查詢實(shí)現(xiàn)淺析
  3. LINQ查詢方式的探尋
  4. LINQ查詢的效果分析
  5. LINQ查詢和泛型類型的關(guān)系淺析

網(wǎng)頁標(biāo)題:LINQ動(dòng)態(tài)查詢的實(shí)現(xiàn)淺析
分享網(wǎng)址:http://www.5511xx.com/article/cdgjjgc.html