日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
LINQLambda表達(dá)式淺談

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

10年的南縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整南縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“南縣網(wǎng)站設(shè)計(jì)”,“南縣網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

有這樣一個(gè)場景:應(yīng)用程序可能會(huì)提供一個(gè)用戶界面,用戶可以使用該用戶界面指定一個(gè)或多個(gè)謂詞來篩選數(shù)據(jù)。這種情況在編譯時(shí)不知道查詢的細(xì)節(jié),動(dòng)態(tài)查詢將十分有用。

LINQ Lambda表達(dá)式是許多標(biāo)準(zhǔn)查詢運(yùn)算符的基礎(chǔ),編譯器創(chuàng)建lambda表達(dá)式以捕獲基礎(chǔ)查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計(jì)算。表達(dá)式目錄樹用于針對數(shù)據(jù)源的結(jié)構(gòu)化查詢,這些數(shù)據(jù)源實(shí)現(xiàn)IQueryable。例如,LINQ to SQL 提供程序?qū)崿F(xiàn) IQueryable接口,用于查詢關(guān)系數(shù)據(jù)存儲(chǔ)。C#和Visual Basic編譯器會(huì)針對此類數(shù)據(jù)源的查詢編譯為代碼,該代碼在運(yùn)行時(shí)將生成一個(gè)表達(dá)式目錄樹。然后,查詢提供程序可以遍歷表達(dá)式目錄樹數(shù)據(jù)結(jié)構(gòu),并將其轉(zhuǎn)換為適合于數(shù)據(jù)源的查詢語言。

表達(dá)式目錄樹在LINQ中用于表示分配給類型為Expression的變量的LINQ Lambda表達(dá)式。還可用于創(chuàng)建動(dòng)態(tài)LINQ查詢。

System.Linq.Expressions命名空間提供用于手動(dòng)生成表達(dá)式目錄樹的API。Expression類包含創(chuàng)建特定類型的表達(dá)式目錄樹節(jié)點(diǎn)的靜態(tài)工廠方法,例如,ParameterExpression(表示一個(gè)已命名的參數(shù)表達(dá)式)或 MethodCallExpression(表示一個(gè)方法調(diào)用)。編譯器生成的表達(dá)式目錄樹的根始終在類型 Expression的節(jié)點(diǎn)中,其中TDelegate是包含至多五個(gè)輸入?yún)?shù)的任何TDelegate委托;也就是說,其根節(jié)點(diǎn)是表示一個(gè)LINQ lambda表達(dá)式。

下面幾個(gè)例子描述如何使用表達(dá)式目錄樹來創(chuàng)建動(dòng)態(tài)LINQ查詢。

1.Select

下面例子說明如何使用表達(dá)式樹依據(jù) IQueryable 數(shù)據(jù)源構(gòu)造一個(gè)動(dòng)態(tài)查詢,查詢出每個(gè)顧客的ContactName,并用GetCommand方法獲取其生成SQL語句。

 
 
 
  1. //依據(jù)IQueryable數(shù)據(jù)源構(gòu)造一個(gè)查詢
  2. IQueryable custs = db.Customers;
  3. //組建一個(gè)表達(dá)式樹來創(chuàng)建一個(gè)參數(shù)
  4. ParameterExpression param = 
  5. Expression.Parameter(typeof(Customer), "c");
  6. //組建表達(dá)式樹:c.ContactName
  7. Expression selector = Expression.Property(param,
  8. typeof(Customer).GetProperty("ContactName"));
  9. Expression pred = Expression.Lambda(selector, param);
  10. //組建表達(dá)式樹: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. //使用表達(dá)式樹來生成動(dòng)態(tài)查詢
  15. IQueryable query = db.Customers.AsQueryable()
  16. .Provider.CreateQuery(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

下面一個(gè)例子是“搭建”Where用法來動(dòng)態(tài)查詢城市在倫敦的顧客。

 
 
 
  1. IQueryable custs = db.Customers;
  2. //創(chuàng)建一個(gè)參數(shù)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. Expression pred = Expression.Lambda(filter, param);
  11. //Where(c=>c.City=="London")
  12. Expression expr = Expression.Call(typeof(Queryable), "Where",
  13. new Type[] { typeof(Customer) }, 
  14. Expression.Constant(custs), pred);
  15. //生成動(dòng)態(tài)查詢
  16. IQueryable query = db.Customers.AsQueryable()
  17. .Provider.CreateQuery(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 = 6; Prec = 0; Scale = 0) [London]

分享文章:LINQLambda表達(dá)式淺談
文章路徑:http://www.dlmjj.cn/article/dpcepse.html