成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LINQ動態查詢的實現淺析

開發 后端
LINQ動態查詢是如何實現的呢?LINQ動態查詢在使用擴展庫Dynamic.cs之后有什么效果呢?那么本文就向你詳細介紹相關內容。

LINQ動態查詢的過程是怎么實現的呢?我們實現LINQ動態查詢會用到還說呢么方法呢?擴展庫Dynamic.cs的實現是什么效果呢?那么讓我們來看看具體的內容。

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

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

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

LINQ動態查詢實現實例:

  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

需要修改的還有幾個方法,不再一一細述,目的都是為了對Like操作符進行檢查,并轉到查應的操作。***增加一個方法GenerateLike,用來產生支持模糊查詢的Lambda表達式。代碼如下:

  1. //創建Like表達式  
  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. //去掉查詢字符中的%符號  
  28. Expression RemovePrecent(string value)  
  29. {  
  30. return Expression.Constant(  
  31. value.Replace("%",String.Empty),  
  32. typeof(string));  
  33. }  

LINQ動態查詢的相關內容就向你介紹到這里,希望那個對你了解和學習LINQ動態查詢有所幫助。

【編輯推薦】

  1. LINQ模糊查詢的學習心得淺析
  2. LINQ嵌套查詢實現淺析
  3. LINQ查詢方式的探尋
  4. LINQ查詢的效果分析
  5. LINQ查詢和泛型類型的關系淺析
責任編輯:仲衡 來源: 網易博客
相關推薦

2009-09-15 09:19:22

linq動態條件

2009-09-14 18:23:59

LINQ嵌套查詢

2009-09-14 19:20:22

LINQ TO SQL

2009-07-22 13:04:41

iBATIS動態查詢

2009-09-15 10:35:11

linq多表查詢

2009-09-10 14:47:53

Linq .NET查詢

2009-09-17 18:05:15

linq to sql

2009-09-14 16:29:39

LINQ嵌套

2009-09-14 09:46:00

LINQ to SQL

2009-09-15 17:16:58

LINQ查詢操作符

2009-09-14 17:10:57

LINQ模糊查詢

2009-09-17 08:47:00

Linq插入數據

2009-09-17 17:03:13

LINQ動態查詢

2009-09-14 18:19:49

LINQ模糊查詢

2009-09-17 16:46:34

Linq to sql

2009-09-18 15:15:12

LINQ to SQL

2009-09-15 10:16:01

LINQ動態查詢

2009-09-08 16:36:10

LINQ查詢基于泛型類

2009-09-13 21:52:16

LINQ字符串

2009-09-16 17:29:10

Linq查詢二維數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线欧美 | 欧洲精品久久久久毛片完整版 | 日韩电影一区二区三区 | 国产精品美女久久久av超清 | 亚洲www啪成人一区二区 | 久久91av| 欧美电影免费观看 | 一级免费视频 | 亚洲精品91| 亚州一区二区三区 | 视频在线观看一区二区 | 国产欧美三区 | 国产精品永久在线观看 | 在线三级网址 | 久久久久国产精品人 | 911影院| 欧美日韩a| 美国一级片在线观看 | 午夜激情在线 | 污片在线观看 | 国产乱码久久久久久一区二区 | 夜夜爽99久久国产综合精品女不卡 | 欧美日韩久久 | 久草热线 | 日韩伦理一区二区 | av在线播放网站 | 粉嫩一区二区三区性色av | 在线免费观看成人 | 免费人成在线观看网站 | 玖玖精品视频 | 国产一区二区三区免费 | 欧美精品一二区 | 日韩亚洲视频在线 | av片免费| 天天操伊人 | 电影91久久久| 日本成人中文字幕在线观看 | 国产网站在线播放 | 日韩午夜在线观看 | 中文字幕成人av | 欧美电影一区 |