自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LINQ高級(jí)特性簡單介紹

開發(fā) 后端
這里介紹LINQ高級(jí)特性,在LINQ中,Lambda 表達(dá)式是許多標(biāo)準(zhǔn)查詢運(yùn)算符的基礎(chǔ),編譯器創(chuàng)建lambda表達(dá)式以捕獲基礎(chǔ)查詢方法。

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

LINQ高級(jí)特性之動(dòng)態(tài)查詢

有這樣一個(gè)場景:應(yīng)用程序可能會(huì)提供一個(gè)用戶界面,用戶可以使用該用戶界面指定一個(gè)或多個(gè)謂詞來篩選數(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á)式目錄樹用于針對(duì)數(shù)據(jù)源的結(jié)構(gòu)化查詢,這些數(shù)據(jù)源實(shí)現(xiàn)IQueryable<T>。例如,LINQ to SQL 提供程序?qū)崿F(xiàn) IQueryable<T>接口,用于查詢關(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ù)源的查詢語言。

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

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<TDelegate>的節(jié)點(diǎn)中,其中TDelegate是包含至多五個(gè)輸入?yún)?shù)的任何TDelegate委托;也就是說,其根節(jié)點(diǎn)是表示一個(gè)lambda表達(dá)式。

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

LINQ高級(jí)特性之Select

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

  1. //依據(jù)IQueryable數(shù)據(jù)源構(gòu)造一個(gè)查詢  
  2. IQueryable<Customer> custs = db.Customers;  
  3. //組建一個(gè)表達(dá)式樹來創(chuàng)建一個(gè)參數(shù)  
  4. ParameterExpressionparam =Expression.Parameter(typeof(Customer),"c");  
  5. //組建表達(dá)式樹  
  6. c.ContactNameExpressionselector =Expression.Property(param,typeof(Customer).
    GetProperty("ContactName"));  
  7. ExpressionExpressionpred =Expression.Lambda(selector, param);  
  8. //組建表達(dá)式樹:Select(c=>c.ContactName)ExpressionExpressionexpr =Expression.Call
    (typeof(Queryable),"Select",newType[] {typeof(Customer),typeof(string) },
    Expression.Constant(custs), pred);  
  9. //使用表達(dá)式樹來生成動(dòng)態(tài)查詢IQueryable<string> query = db.Customers.AsQueryable()  
  10. .Provider.CreateQuery<string>(expr);  
  11. //使用GetCommand方法獲取SQL語句   
  12. System.Data.Common.DbCommandcmd = db.GetCommand(query);  
  13. Console.WriteLine(cmd.CommandText); 

【編輯推薦】

  1. LINQ to SQL數(shù)據(jù)表介紹
  2. LINQ查詢的目的與實(shí)現(xiàn)手段
  3. LINQ from子句進(jìn)行復(fù)合查詢實(shí)現(xiàn)方法
  4. LINQ查詢表達(dá)式功能詳解
  5. LINQ基礎(chǔ)概念總結(jié)
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-09-08 10:50:20

2009-09-11 09:41:19

LINQ to SQL

2009-09-09 14:20:49

LINQ To Luc

2009-09-09 09:36:25

Linq對(duì)象引用

2009-09-07 17:05:10

LINQ進(jìn)行查詢

2009-09-15 09:39:38

LINQ查詢架構(gòu)

2009-09-17 09:15:49

Linq表達(dá)式樹

2011-06-28 11:27:19

java克隆對(duì)象

2009-09-08 13:07:15

介紹Linq to S

2009-09-10 17:30:15

LINQ Where子

2009-09-16 10:38:43

LINQ查詢

2009-08-13 11:01:32

LINQPadLINQ工具

2009-09-15 15:09:50

Linq本質(zhì)

2009-09-14 10:57:46

LINQ入門

2009-09-08 13:16:01

Linq to SQL

2009-09-09 15:28:43

Linq to obj

2009-09-15 16:26:36

Linq orderb

2009-09-18 16:00:07

LINQ架構(gòu)

2009-09-10 16:28:17

LINQ查詢

2009-09-18 09:25:06

LINQ Framew
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)