小編給大家分享一下LINQ中Lambda表達(dá)式怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都網(wǎng)站建設(shè)公司更懂你!創(chuàng)新互聯(lián)公司只做搜索引擎喜歡的網(wǎng)站!成都網(wǎng)站制作前臺(tái)采用搜索引擎認(rèn)可的DIV+CSS架構(gòu),全站HTML靜態(tài),HTML5+CSS3網(wǎng)站,提供:網(wǎng)站建設(shè),微信開(kāi)發(fā),微信小程序,商城開(kāi)發(fā),手機(jī)APP定制開(kāi)發(fā),域名申請(qǐng),服務(wù)器租售,網(wǎng)站代托管運(yùn)營(yíng),微信公眾號(hào)代托管運(yùn)營(yíng)。
Linq有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ Lambda表達(dá)式,包括介紹表達(dá)式目錄樹(shù)在LINQ中用于表示分配給類型為Expression
有這樣一個(gè)場(chǎng)景:應(yīng)用程序可能會(huì)提供一個(gè)用戶界面,用戶可以使用該用戶界面指定一個(gè)或多個(gè)謂詞來(lái)篩選數(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ù)用于針對(duì)數(shù)據(jù)源的結(jié)構(gòu)化查詢,這些數(shù)據(jù)源實(shí)現(xiàn)IQueryable
表達(dá)式目錄樹(shù)在LINQ中用于表示分配給類型為Expression
System.Linq.Expressions命名空間提供用于手動(dòng)生成表達(dá)式目錄樹(shù)的API。Expression類包含創(chuàng)建特定類型的表達(dá)式目錄樹(shù)節(jié)點(diǎn)的靜態(tài)工廠方法,例如,ParameterExpression(表示一個(gè)已命名的參數(shù)表達(dá)式)或 MethodCallExpression(表示一個(gè)方法調(diào)用)。編譯器生成的表達(dá)式目錄樹(shù)的根始終在類型 Expression
下面幾個(gè)例子描述如何使用表達(dá)式目錄樹(shù)來(lái)創(chuàng)建動(dòng)態(tài)LINQ查詢。
1.Select
下面例子說(shuō)明如何使用表達(dá)式樹(shù)依據(jù) IQueryable 數(shù)據(jù)源構(gòu)造一個(gè)動(dòng)態(tài)查詢,查詢出每個(gè)顧客的ContactName,并用GetCommand方法獲取其生成SQL語(yǔ)句。
//依據(jù)IQueryable數(shù)據(jù)源構(gòu)造一個(gè)查詢 IQueryablecusts = 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)查詢 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)查詢城市在倫敦的顧客。
IQueryablecusts = 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)查詢 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]
以上是“LINQ中Lambda表達(dá)式怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!