这篇文章主要介绍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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。