最近在用c#與資料庫打交道。開發過程中採用了orm模型(以前是純sql玩法,複雜的邏輯用儲存過程做)。
為了能通過配置檔案動態地查詢字段,也就是說需要能這樣寫:
db.asquery.select("
字段")//
偽**
通過多方查詢終於找到了方案,那就是用動態lambda表示式樹(.net3.5以後的版本支援)。
後來看別人寫的orm**中,將c#**轉為sql語句時出採用了表示式樹,所以馬上提起了學習興趣。
先寫著寫乙個hello world ,就是動態地拼出乙個 x=>console.writeline(x);
1 actionaction = x =>console.writeline(x);**如下:2 action("
hello world
");
1以下為執行的時候看到的效果//引數 x => console.writeline(x) 中 最前面的那個 x
2var para = expression.parameter(typeof(string), "x"
);3//找到 onsole.writeline(string value) 這個版本
4 methodinfo method = typeof(console).getmethod("
writeline
", new type );5//
拼接 console.writeline(x) 方法體
6var call = expression.call(null
, method, para);7//
拼接成 x => console.writeline(x) 格式
8var lambda = expression.lambda>(call, para);9//
轉換成委託
10var action =lambda.compile();
11 action("
hello world
");
先寫乙個做為入門,慢慢研究。
lambda表示式 lambda表示式
1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...
動態建立 Lambda 表示式
作為 delegate 的更深度進化,lambda 讓我們的 顯得更加簡潔和優雅,但同時也面臨乙個問題,就是如何依據外部條件動態構建乙個 lambda 表示式。或許你會奇怪這個需求是如何產生的 首先,lambda 在 dlinq 中承擔了以往 t sql 的部分角色 其次,在資料庫設計中,我們往往需...
動態建立 Lambda 表示式
首先我們看乙個簡單 lambda 表示式的構成。i i 5 在這個表示式中,i 被稱為 parameter,i 5 是 body。我們可以對 body 進行更進一步的分解,那麼 i 5 分別包含引數 i 操作符 以及乙個常數 5 所有這些通過特定順序的組合,從而構建乙個完整的 lambda 表示式。...