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

LINQ Lambda表達式淺談

開發 后端
這里介紹LINQ Lambda表達式是許多標準查詢運算符的基礎,編譯器創建lambda表達式以捕獲基礎查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計算。

Linq有很多值得學習的地方,這里我們主要介紹LINQ Lambda表達式,包括介紹表達式目錄樹在LINQ中用于表示分配給類型為Expression<TDelegate>的變量的LINQ Lambda表達式等方面。

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

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

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

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

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

1.Select

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

  1. //依據IQueryable數據源構造一個查詢  
  2. IQueryable<Customer> custs = db.Customers;  
  3. //組建一個表達式樹來創建一個參數  
  4. ParameterExpression param =   
  5. Expression.Parameter(typeof(Customer), "c");  
  6. //組建表達式樹:c.ContactName  
  7. Expression selector = Expression.Property(param,  
  8. typeof(Customer).GetProperty("ContactName"));  
  9. Expression pred = Expression.Lambda(selector, param);  
  10. //組建表達式樹:Select(c=>c.ContactName)  
  11. Expression expr = Expression.Call(typeof(Queryable), "Select",  
  12. new Type[] { typeof(Customer), typeof(string) },  
  13. Expression.Constant(custs), pred);  
  14. //使用表達式樹來生成動態查詢  
  15. IQueryable<string> query = db.Customers.AsQueryable()  
  16. .Provider.CreateQuery<string>(expr);  
  17. //使用GetCommand方法獲取SQL語句  
  18. System.Data.Common.DbCommand cmd = db.GetCommand(query);  
  19. Console.WriteLine(cmd.CommandText); 

生成的SQL語句為:

  1. SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0] 

2.Where

下面一個例子是“搭建”Where用法來動態查詢城市在倫敦的顧客。

  1. IQueryable<Customer> custs = db.Customers;  
  2. //創建一個參數c  
  3. ParameterExpression param =   
  4. Expression.Parameter(typeof(Customer), "c");  
  5. //c.City=="London"  
  6. Expression left = Expression.Property(param,  
  7. typeof(Customer).GetProperty("City"));  
  8. Expression right = Expression.Constant("London");  
  9. Expression filter = Expression.Equal(left, right);  
  10.  
  11. Expression pred = Expression.Lambda(filter, param);  
  12. //Where(c=>c.City=="London")  
  13. Expression expr = Expression.Call(typeof(Queryable), "Where",  
  14. new Type[] { typeof(Customer) },   
  15. Expression.Constant(custs), pred);  
  16. //生成動態查詢  
  17. IQueryable<Customer> query = db.Customers.AsQueryable()  
  18. .Provider.CreateQuery<Customer>(expr); 

生成的SQL語句為:

  1. SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],   
  2. [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],   
  3. [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]  
  4. FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0  
  5. -- @p0: Input NVarChar (Size = 6Prec = 0Scale = 0) [London] 

【編輯推薦】

  1. Linq結果集形狀概述
  2. Linq存儲過程返回詳解
  3. Linq調用LoadProducts方法
  4. Linq使用數據表簡單描述
  5. Linq對象引用簡單介紹
責任編輯:佚名 來源: IT168
相關推薦

2009-09-11 09:48:27

Linq Lambda

2009-09-15 15:18:00

Linq Lambda

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-09-17 09:09:50

Lambda表達式Linq查詢

2009-09-09 17:14:17

Linq lambda

2009-08-27 09:57:50

C# Lambda表達

2009-04-29 09:05:59

Lambda抽象代表.NET

2009-09-09 17:45:07

Linq表達式

2009-09-17 14:21:19

LINQ表達式

2009-09-11 12:32:33

LINQ表達式

2011-10-28 16:34:13

LINQ

2009-09-10 15:35:07

LINQ查詢表達式

2009-09-17 11:08:55

LINQ查詢表達式

2022-12-05 09:31:51

接口lambda表達式

2009-09-07 17:18:33

LINQ查詢表達式

2009-09-11 09:53:16

Linq查詢表達式

2009-09-17 09:15:49

Linq表達式樹

2009-08-27 09:13:28

LINQ查詢表達式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91麻豆精品国产91久久久更新资源速度超快 | 国产丝袜一区二区三区免费视频 | 精精国产xxxx视频在线野外 | 在线欧美一区 | 中文字幕高清免费日韩视频在线 | 精品国产一区二区国模嫣然 | 免费视频一区二区 | 免费成人高清在线视频 | 亚洲视频二区 | 成人在线免费观看视频 | 视频一区欧美 | 欧美一区二区在线观看 | 欧美亚洲综合久久 | 久久久视| 欧美综合一区 | 久久国产精品久久 | 一级高清视频 | 欧美不卡一区 | 国产精品一区在线 | 99看片网 | 337p日本欧洲亚洲大胆 | 欧美一区二区在线 | 午夜小视频在线播放 | 亚洲精品在线免费观看视频 | 日日夜夜精品视频 | 新av在线| 国产精品久久久亚洲 | 性色的免费视频 | 欧美精品日韩 | 天堂在线一区 | 日韩欧美一区二区三区免费观看 | 视频一区二区三区中文字幕 | 华丽的挑战在线观看 | 美女久久 | 国产区精品| 国产精品日韩高清伦字幕搜索 | 伊人狼人影院 | 欧美日韩成人一区二区 | 国产中文字幕在线观看 | 国产九九av | 91精品国产91久久久久久吃药 |