有如下一段**,db.employess 是table型別,而table型別繼承了iqueryable,.net3.5中的擴充套件方法特性,在queryable中定義了select where ....等一系列方法,這些方法跟linq查詢中的關鍵字select where 等對應,
linq 查詢語句,編譯後最終形成對iqueryable型別中,select where等形式函式呼叫
queryable 與 enumerable 類似,是linq 查詢實現的基礎, 在enumerable裡,一般將 lambda 表達公式編譯成匿名委託呼叫,
而在queryable類中則將lambda 表達公式,編譯成lambda表示式樹, 接著把這些表達樹(類似解釋型的程式語言),傳遞給相應的提供程式,如 sql2000 等,提供程式,根據 lambada樹, 解釋sql語句, 接著通過ado.net 實現資料庫的操作.
**:
class program
;var q2 = db.employees.where(emp => emp.employeeid > 2).select(emp => new );
console.readline();}}
編譯後的結果
// methods
private static void main(string args)
)).select(expression.lambda(expression.new((constructorinfo) methodof(<>f__anonymoustype0..ctor, <>f__anonymoustype0), new expression , new methodinfo ), new parameterexpression ));
var q2 = db.employees.where(expression.lambda>(expression.greaterthan(expression.property(cs$0$0000 = expression.parameter(typeof(employees), "emp"), (methodinfo) methodof(employees.get_employeeid)), expression.constant(2, typeof(int))), new parameterexpression )).select(expression.lambda(expression.new((constructorinfo) methodof(<>f__anonymoustype0..ctor, <>f__anonymoustype0), new expression , new methodinfo ), new parameterexpression ));
console.readline();
}可以發現q1,跟q2查詢最終編譯成函式形式,並且一模一樣.
LINQ 學習筆記7
func delegates 函式 委託 func delegae的宣告 public delegate tr func public delegate tr func t0 a0 public delegate tr func t0 a0,t1 a1 public delegate tr func...
LinQ學習筆記(一)
查詢表示式必須以 from 子句開頭,並且必須以 select 或 group 子句結尾。在第乙個 from 子句和最後乙個 select 或 group 子句之間,查詢表示式可以包含乙個或多個下列可選子句 where orderby join let 甚至附加的 from 子句。還可以使用 int...
LINQ學習筆記(二)
第乙個linq示例 第一步 新建乙個asp.net web 應用程式,在資料連線中建立乙個資料庫,我今天用了northwind資料庫。第二步 在專案中新增乙個linq to sql類,建立dbml database mark language。資料庫描述語言,是一種xml格式的文件,用來描述資料庫 ...