掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文向大家介紹LINQ Expression tree,可能好多人還不了解LINQ Expression tree,沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)軹城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
LINQ Expression tree
一棵LINQ Expession tree在創(chuàng)建后就不可再改變。假如某個(gè)程序接收一棵Expression tree為參數(shù),然后僅僅是用于生成別的形式的代碼(例如SQL語(yǔ)句),那么這個(gè)不可改變性不會(huì)有什么影響。但如果一個(gè)程序想對(duì)一棵Expression tree進(jìn)行修改該怎么辦呢?解決方法是從來(lái)源的Expression tree復(fù)制出一棵新的樹,在復(fù)制過(guò)程中根據(jù)自己的需要選擇是直接復(fù)制原有節(jié)點(diǎn)還是創(chuàng)建修改了的節(jié)點(diǎn)。MSDN上有一個(gè)例子解釋了如何實(shí)現(xiàn)這種需求,如何:修改表達(dá)式目錄樹。
更詳細(xì)的LINQ Expression tree的討論留待以后再說(shuō)。先看代碼:
- digraph ExpressionTree {
- node [fontsize=12, fontcolor=blue, font=Courier, shape=box]
- // node declarations
- lambda [label="Lambda Expression"]
- anoFuncSig [label="Anonymous Function\nSignature"]
- arrow [label="=>"]
- anoFuncBody [label="Anonymous Function\nBody"]
- impFuncSig [label="Implicit Anonymous\nFunction Signature"]
- expr [label="Expression"]
- impParam [label="Implicit Anonymous\nFunction Parameter"]
- uexpr1 [label="Unary Expression"]
- neg [label="-"]
- uexpr2 [label="Unary Expression"]
- id [label="Identifier:\nx"]
- simpName [label="Simple Name:\nx"]
- // relations
- lambda -> anoFuncSig
- lambda -> arrow
- lambda -> anoFuncBody
- {rank=same; anoFuncSig arrow anoFuncBody }
- anoFuncSig -> impFuncSig
- anoFuncBody -> expr
- {rank=same; impFuncSig expr }
- impFuncSig -> impParam
- expr -> uexpr1 [style=dashed]
- {rank=same; impParam uexpr1 }
- impParam -> id
- uexpr1 -> neg
- uexpr1 -> uexpr2
- {rank=same; id neg uexpr2 }
- uexpr2 -> simpName
- }
ast.dot:
- digraph ExpressionTree {
- node [fontsize=12, fontcolor=blue, font=Courier, shape=box]
- edge [fontsize=10, fontcolor=purple]
- // node declarations
- lambda [label="Lambda Expression"]
- param [label="Parameter:\nx"]
- body [label="Unary Expression\n(Negation)"]
- param2 [label="Simple Name:\nx"]
- // relations
- lambda -> param [label="Signature"]
- lambda -> body [label="Body"]
- {rank=same; param body }
- body -> param2
- param -> param2 [label="(same node)", fontsize=8, style=dashed, dir=both]
- }
【編輯推薦】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流