您好,登錄后才能下訂單哦!
這篇文章主要介紹LINQ Expression tree是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
LINQ Expression tree
一棵LINQ Expession tree在創建后就不可再改變。假如某個程序接收一棵Expression tree為參數,然后僅僅是用于生成別的形式的代碼(例如SQL語句),那么這個不可改變性不會有什么影響。但如果一個程序想對一棵Expression tree進行修改該怎么辦呢?解決方法是從來源的Expression tree復制出一棵新的樹,在復制過程中根據自己的需要選擇是直接復制原有節點還是創建修改了的節點。MSDN上有一個例子解釋了如何實現這種需求,如何:修改表達式目錄樹。
更詳細的LINQ Expression tree的討論留待以后再說。先看代碼:
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] }
以上是“LINQ Expression tree是什么”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。