十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本文介紹LINQ高級特性,其包括大家都關心的動態(tài)查詢的用法和使用表達式樹依據(jù) IQueryable 數(shù)據(jù)源構造一個動態(tài)查詢。

創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)雅安移動機房報價,主機托管價格性價比高,為金融證券行業(yè)服務器托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
LINQ高級特性之動態(tài)查詢
有這樣一個場景:應用程序可能會提供一個用戶界面,用戶可以使用該用戶界面指定一個或多個謂詞來篩選數(shù)據(jù)。這種情況在編譯時不知道查詢的細節(jié),動態(tài)查詢將十分有用。
在LINQ中,Lambda 表達式是許多標準查詢運算符的基礎,編譯器創(chuàng)建lambda表達式以捕獲基礎查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計算。表達式目錄樹用于針對數(shù)據(jù)源的結構化查詢,這些數(shù)據(jù)源實現(xiàn)IQueryable
表達式目錄樹在LINQ中用于表示分配給類型為Expression
System.Linq.Expressions 命名空間提供用于手動生成表達式目錄樹的API。Expression類包含創(chuàng)建特定類型的表達式目錄樹節(jié)點的靜態(tài)工廠方法,例如,ParameterExpression(表示一個已命名的參數(shù)表達式)或 MethodCallExpression(表示一個方法調用)。編譯器生成的表達式目錄樹的根始終在類型 Expression
下面幾個例子描述如何使用表達式目錄樹來創(chuàng)建動態(tài)LINQ查詢。
LINQ高級特性之Select
下面例子說明如何使用表達式樹依據(jù) IQueryable 數(shù)據(jù)源構造一個動態(tài)查詢,查詢出每個顧客的ContactName,并用GetCommand方法獲取其生成SQL語句。
- //依據(jù)IQueryable數(shù)據(jù)源構造一個查詢
- IQueryable
custs = db.Customers; - //組建一個表達式樹來創(chuàng)建一個參數(shù)
- ParameterExpressionparam =Expression.Parameter(typeof(Customer),"c");
- //組建表達式樹
- c.ContactNameExpressionselector =Expression.Property(param,typeof(Customer).
GetProperty("ContactName"));- ExpressionExpressionpred =Expression.Lambda(selector, param);
- //組建表達式樹:Select(c=>c.ContactName)ExpressionExpressionexpr =Expression.Call
(typeof(Queryable),"Select",newType[] {typeof(Customer),typeof(string) },
Expression.Constant(custs), pred);- //使用表達式樹來生成動態(tài)查詢IQueryable
query = db.Customers.AsQueryable() - .Provider.CreateQuery
(expr); - //使用GetCommand方法獲取SQL語句
- System.Data.Common.DbCommandcmd = db.GetCommand(query);
- Console.WriteLine(cmd.CommandText);