新聞中心
本文介紹LINQ高級(jí)特性,其包括大家都關(guān)心的動(dòng)態(tài)查詢(xún)的用法和使用表達(dá)式樹(shù)依據(jù) IQueryable 數(shù)據(jù)源構(gòu)造一個(gè)動(dòng)態(tài)查詢(xún)。

創(chuàng)新互聯(lián)公司基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線(xiàn)BGP大帶寬租用,是為眾多客戶(hù)提供專(zhuān)業(yè)雅安移動(dòng)機(jī)房報(bào)價(jià),主機(jī)托管價(jià)格性?xún)r(jià)比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線(xiàn)路100M獨(dú)享,G口帶寬及機(jī)柜租用的專(zhuān)業(yè)成都idc公司。
LINQ高級(jí)特性之動(dòng)態(tài)查詢(xún)
有這樣一個(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)工廠(chǎng)方法,例如,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)。
LINQ高級(jí)特性之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ù)
- ParameterExpressionparam =Expression.Parameter(typeof(Customer),"c");
- //組建表達(dá)式樹(shù)
- c.ContactNameExpressionselector =Expression.Property(param,typeof(Customer).
GetProperty("ContactName"));- ExpressionExpressionpred =Expression.Lambda(selector, param);
- //組建表達(dá)式樹(shù):Select(c=>c.ContactName)ExpressionExpressionexpr =Expression.Call
(typeof(Queryable),"Select",newType[] {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.DbCommandcmd = db.GetCommand(query);
- Console.WriteLine(cmd.CommandText);
網(wǎng)站名稱(chēng):LINQ高級(jí)特性簡(jiǎn)單介紹
文章URL:http://m.fisionsoft.com.cn/article/djjcdoe.html


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