新聞中心
Linq有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ Lambda表達(dá)式,包括介紹表達(dá)式目錄樹(shù)在LINQ中用于表示分配給類(lèi)型為Expression

10年的南縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整南縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“南縣網(wǎng)站設(shè)計(jì)”,“南縣網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
有這樣一個(gè)場(chǎng)景:應(yīng)用程序可能會(huì)提供一個(gè)用戶(hù)界面,用戶(hù)可以使用該用戶(hù)界面指定一個(gè)或多個(gè)謂詞來(lái)篩選數(shù)據(jù)。這種情況在編譯時(shí)不知道查詢(xún)的細(xì)節(jié),動(dòng)態(tài)查詢(xún)將十分有用。
LINQ Lambda表達(dá)式是許多標(biāo)準(zhǔn)查詢(xún)運(yùn)算符的基礎(chǔ),編譯器創(chuàng)建lambda表達(dá)式以捕獲基礎(chǔ)查詢(xún)方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計(jì)算。表達(dá)式目錄樹(shù)用于針對(duì)數(shù)據(jù)源的結(jié)構(gòu)化查詢(xún),這些數(shù)據(jù)源實(shí)現(xiàn)IQueryable
表達(dá)式目錄樹(shù)在LINQ中用于表示分配給類(lèi)型為Expression
System.Linq.Expressions命名空間提供用于手動(dòng)生成表達(dá)式目錄樹(shù)的API。Expression類(lèi)包含創(chuàng)建特定類(lèi)型的表達(dá)式目錄樹(shù)節(jié)點(diǎn)的靜態(tài)工廠方法,例如,ParameterExpression(表示一個(gè)已命名的參數(shù)表達(dá)式)或 MethodCallExpression(表示一個(gè)方法調(diào)用)。編譯器生成的表達(dá)式目錄樹(shù)的根始終在類(lèi)型 Expression
下面幾個(gè)例子描述如何使用表達(dá)式目錄樹(shù)來(lái)創(chuàng)建動(dòng)態(tài)LINQ查詢(xún)。
1.Select
下面例子說(shuō)明如何使用表達(dá)式樹(shù)依據(jù) IQueryable 數(shù)據(jù)源構(gòu)造一個(gè)動(dòng)態(tài)查詢(xún),查詢(xún)出每個(gè)顧客的ContactName,并用GetCommand方法獲取其生成SQL語(yǔ)句。
- //依據(jù)IQueryable數(shù)據(jù)源構(gòu)造一個(gè)查詢(xún)
- IQueryable
custs = db.Customers; - //組建一個(gè)表達(dá)式樹(shù)來(lái)創(chuàng)建一個(gè)參數(shù)
- ParameterExpression param =
- Expression.Parameter(typeof(Customer), "c");
- //組建表達(dá)式樹(shù):c.ContactName
- Expression selector = Expression.Property(param,
- typeof(Customer).GetProperty("ContactName"));
- Expression pred = Expression.Lambda(selector, param);
- //組建表達(dá)式樹(shù):Select(c=>c.ContactName)
- Expression expr = Expression.Call(typeof(Queryable), "Select",
- new Type[] { typeof(Customer), typeof(string) },
- Expression.Constant(custs), pred);
- //使用表達(dá)式樹(shù)來(lái)生成動(dòng)態(tài)查詢(xún)
- IQueryable
query = db.Customers.AsQueryable() - .Provider.CreateQuery
(expr); - //使用GetCommand方法獲取SQL語(yǔ)句
- System.Data.Common.DbCommand cmd = db.GetCommand(query);
- Console.WriteLine(cmd.CommandText);
生成的SQL語(yǔ)句為:
- SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0]
2.Where
下面一個(gè)例子是“搭建”Where用法來(lái)動(dòng)態(tài)查詢(xún)城市在倫敦的顧客。
- IQueryable
custs = db.Customers; - //創(chuàng)建一個(gè)參數(shù)c
- ParameterExpression param =
- Expression.Parameter(typeof(Customer), "c");
- //c.City=="London"
- Expression left = Expression.Property(param,
- typeof(Customer).GetProperty("City"));
- Expression right = Expression.Constant("London");
- Expression filter = Expression.Equal(left, right);
- Expression pred = Expression.Lambda(filter, param);
- //Where(c=>c.City=="London")
- Expression expr = Expression.Call(typeof(Queryable), "Where",
- new Type[] { typeof(Customer) },
- Expression.Constant(custs), pred);
- //生成動(dòng)態(tài)查詢(xún)
- IQueryable
query = db.Customers.AsQueryable() - .Provider.CreateQuery
(expr);
生成的SQL語(yǔ)句為:
- SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],
- [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],
- [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
- FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0
- -- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]
當(dāng)前名稱(chēng):LINQLambda表達(dá)式淺談
文章網(wǎng)址:http://www.5511xx.com/article/dpcepse.html


咨詢(xún)
建站咨詢(xún)
