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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
LINQ動(dòng)態(tài)查詢的方法有哪些

本篇內(nèi)容介紹了“LINQ動(dòng)態(tài)查詢的方法有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家專業(yè)提供霍山企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為霍山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

在LINQ動(dòng)態(tài)查詢中,Lambda表達(dá)式是許多標(biāo)準(zhǔn)查詢運(yùn)算符的基礎(chǔ),編譯器創(chuàng)建lambda表達(dá)式以捕獲基礎(chǔ)查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計(jì)算。表達(dá)式目錄樹用于針對(duì)數(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ì)針對(duì)此類數(shù)據(jù)源的查詢編譯為代碼,該代碼在運(yùn)行時(shí)將生成一個(gè)表達(dá)式目錄樹。然后,查詢提供程序可以遍歷表達(dá)式目錄樹數(shù)據(jù)結(jié)構(gòu),并將其轉(zhuǎn)換為適合于數(shù)據(jù)源的查詢語(yǔ)言。

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

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è)lambda表達(dá)式。

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

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

//依據(jù)IQueryable數(shù)據(jù)源構(gòu)造一個(gè)查詢  IQueryable custs = db.Customers;  //組建一個(gè)表達(dá)式樹來創(chuàng)建一個(gè)參數(shù)  ParameterExpression param =     Expression.Parameter(typeof(Customer), "c");  //組建表達(dá)式樹:  c.ContactNameExpression selector = Expression.Property(param,    typeof(Customer).GetProperty("ContactName"));Expression pred = Expression.Lambda(selector, param);  //組建表達(dá)式樹:  Select(c=>c.ContactName)Expression expr = Expression.Call(typeof(Queryable), "Select",    new Type[] { typeof(Customer), typeof(string) },    Expression.Constant(custs), pred);  //使用表達(dá)式樹來生成動(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.LINQ動(dòng)態(tài)查詢之Where下面一個(gè)例子是“搭建”Where用法來動(dòng)態(tài)查詢城市在倫敦的顧客。

IQueryable custs = db.Customers;  //創(chuàng)建一個(gè)參數(shù)  cParameterExpression 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]

3.LINQ動(dòng)態(tài)查詢之OrderBy本例既實(shí)現(xiàn)排序功能又實(shí)現(xiàn)了過濾功能。

IQueryable custs = db.Customers;    //創(chuàng)建一個(gè)參數(shù)cParameterExpression 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")MethodCallExpression whereCallExpression =   Expression.Call(    typeof(Queryable), "Where",      new Type[] { typeof(Customer) },    Expression.Constant(custs), pred);    OrderBy(ContactName =>   ContactName)MethodCallExpression orderByCallExpression =   Expression.Call(    typeof(Queryable), "OrderBy",      new Type[] { typeof(Customer), typeof(string) },       whereCallExpression,      Expression.Lambda(Expression.Property    (param, "ContactName"), param));    //生成動(dòng)態(tài)查詢    IQueryable query =  db.Customers.AsQueryable().Provider.CreateQuery(orderByCallExpression);

生成的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] = @p0ORDER BY [t0].[ContactName]-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

4.LINQ動(dòng)態(tài)查詢之Union下面的例子使用表達(dá)式樹動(dòng)態(tài)查詢顧客和雇員同在的城市。

//e.CityIQueryable custs = db.Customers;          ParameterExpression param1 = Expression.Parameter(typeof(Customer), "e");  Expression left1 = Expression.Property(param1,typeof(Customer).GetProperty("City"));Expression pred1 = Expression.Lambda(left1, param1);  c.CityIQueryable employees = db.Employees;ParameterExpression param2 = Expression.Parameter(typeof(Employee), "c");Expression left2 = Expression.Property(param2,     typeof(Employee).GetProperty("City"));Expression pred2 = Expression.Lambda(left2, param2);  Select(e=>e.City)Expression expr1 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Customer), typeof(string) },Expression.Constant(custs), pred1);  Select(c=>c.City)Expression expr2 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Employee), typeof(string) }, Expression.Constant(employees), pred2);  //生成動(dòng)態(tài)查詢  IQueryable q1 = db.Customers.AsQueryable().Provider.CreateQuery(expr1);IQueryable q2 = db.Employees.AsQueryable().Provider.CreateQuery(expr2);  //并集  var q3 = q1.Union(q2);

生成的SQL語(yǔ)句為:

SELECT [t2].[City]  FROM   (    SELECT [t0].[City] FROM [dbo].[Customers] AS [t0]    UNION    SELECT [t1].[City] FROM [dbo].[Employees] AS [t1]    )   AS [t2]

“LINQ動(dòng)態(tài)查詢的方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞名稱:LINQ動(dòng)態(tài)查詢的方法有哪些
當(dāng)前路徑:http://www.dlmjj.cn/article/pdcddj.html