LINQ高級特性有哪些

這篇文章將為大家詳細講解有關LINQ高級特性有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創新互聯建站-專業網站定制、快速模板網站建設、高性價比寶山網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式寶山網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋寶山地區。費用合理售后完善,十余年實體公司更值得信賴。

LINQ高級特性之動態查詢

有這樣一個場景:應用程序可能會提供一個用戶界面,用戶可以使用該用戶界面指定一個或多個謂詞來篩選數據。這種情況在編譯時不知道查詢的細節,動態查詢將十分有用。

在LINQ中,Lambda 表達式是許多標準查詢運算符的基礎,編譯器創建lambda表達式以捕獲基礎查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計算。表達式目錄樹用于針對數據源的結構化查詢,這些數據源實現IQueryable<T>。例如,LINQ to SQL 提供程序實現 IQueryable<T>接口,用于查詢關系數據存儲。C#和Visual Basic編譯器會針對此類數據源的查詢編譯為代碼,該代碼在運行時將生成一個表達式目錄樹。然后,查詢提供程序可以遍歷表達式目錄樹數據結構,并將其轉換為適合于數據源的查詢語言。

表達式目錄樹在LINQ中用于表示分配給類型為Expression<TDelegate>的變量的Lambda表達式。還可用于創建動態LINQ查詢。

System.Linq.Expressions 命名空間提供用于手動生成表達式目錄樹的API。Expression類包含創建特定類型的表達式目錄樹節點的靜態工廠方法,例如,ParameterExpression(表示一個已命名的參數表達式)或 MethodCallExpression(表示一個方法調用)。編譯器生成的表達式目錄樹的根始終在類型 Expression<TDelegate>的節點中,其中TDelegate是包含至多五個輸入參數的任何TDelegate委托;也就是說,其根節點是表示一個lambda表達式。

下面幾個例子描述如何使用表達式目錄樹來創建動態LINQ查詢。

LINQ高級特性之Select

下面例子說明如何使用表達式樹依據 IQueryable 數據源構造一個動態查詢,查詢出每個顧客的ContactName,并用GetCommand方法獲取其生成SQL語句。

  1. //依據IQueryable數據源構造一個查詢  

  2. IQueryable<Customer> custs = db.Customers;  

  3. //組建一個表達式樹來創建一個參數  

  4. ParameterExpressionparam =Expression.Parameter(typeof(Customer),"c");  

  5. //組建表達式樹  

  6. c.ContactNameExpressionselector =Expression.Property(param,typeof(Customer).
    GetProperty("ContactName"));  

  7. ExpressionExpressionpred =Expression.Lambda(selector, param);  

  8. //組建表達式樹:Select(c=>c.ContactName)ExpressionExpressionexpr =Expression.Call
    (typeof(Queryable),"Select",newType[] {typeof(Customer),typeof(string) },
    Expression.Constant(custs), pred);  

  9. //使用表達式樹來生成動態查詢IQueryable<string> query = db.Customers.AsQueryable()  

  10. .Provider.CreateQuery<string>(expr);  

  11. //使用GetCommand方法獲取SQL語句   

  12. System.Data.Common.DbCommandcmd = db.GetCommand(query);  

  13. Console.WriteLine(cmd.CommandText); 

關于“LINQ高級特性有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

網站名稱:LINQ高級特性有哪些
網址分享:http://m.kartarina.com/article0/jedcio.html

成都網站建設公司_創新互聯,為您提供網站建設虛擬主機電子商務建站公司網站維護用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 亚洲av极品无码专区在线观看| 亚洲国产精品无码久久SM| 尤物永久免费AV无码网站| 无码无遮挡又大又爽又黄的视频 | 麻豆精品无码国产在线果冻| 亚洲av无码专区青青草原| 精品人妻中文无码AV在线| 久久老子午夜精品无码怎么打| 亚洲精品无码专区在线播放| 成人午夜亚洲精品无码网站| 亚洲AV综合色区无码一二三区 | 人妻少妇精品无码专区| 中文无码久久精品| 成人免费无码大片A毛片抽搐色欲| 成人无码午夜在线观看| 久久久国产精品无码一区二区三区 | 亚洲AV日韩AV永久无码绿巨人 | 亚洲AV色无码乱码在线观看| 高潮潮喷奶水飞溅视频无码| 成人无码区免费视频观看| 无码性午夜视频在线观看| 中文字幕AV中文字无码亚| 成人免费无遮挡无码黄漫视频| 亚洲中文无码av永久| 午夜无码A级毛片免费视频| 精品无码黑人又粗又大又长 | 国产av永久无码天堂影院| 欧日韩国产无码专区| 久久久久无码精品国产h动漫| 亚洲性无码av在线| 久久久久亚洲av无码专区喷水| 最新高清无码专区| 中文精品无码中文字幕无码专区| 中文无码日韩欧免费视频| 少妇中文无码高清| 亚洲日韩精品无码专区网站| 国产高清无码视频| 亚洲桃色AV无码| 无码人妻少妇久久中文字幕蜜桃| 亚洲一区AV无码少妇电影☆| 亚洲av无码专区在线播放|