zoukankan      html  css  js  c++  java
  • 打造自己的LINQ Provider(上):Expression Tree揭秘

    在.NET Framework 3.5中提供了LINQ 支持后,LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱,而各种LINQ Provider更是满天飞,如LINQ to NHibernate、LINQ to Google等,大有“一切皆LINQ”的趋势。LINQ本身也提供了很好的扩展性,使得我们可以轻松的编写属于自己的LINQ Provider。

    本文为打造自己的LINQ Provider系列文章第一篇,主要介绍表达式目录树(Expression Tree)的相关知识。

    认识表达式目录树

    究竟什么是表达式目录树(Expression Tree),它是一种抽象语法树或者说它是一种数据结构,通过解析表达式目录树,可以实现我们一些特定的功能(后面会说到),我们首先来看看如何构造出一个表达式目录树,最简单的方法莫过于使用Lambda表达式,看下面的代码:

    Expression<Func<int, int, int>> expression = (a, b) => a * b + 2;

    在我们将Lambda表达式指定给Expression<TDelegate>类型的变量(参数)时,编译器将会发出生成表达式目录树的指令,如上面这段代码中的Lambda表达式(a, b) => a * b + 2将创建一个表达式目录树,它表示的是一种数据结构,即我们把一行代码用数据结构的形式表示了出来,具体来说最终构造出来的表达式目录树形状如下图所示:

    TerryLee_0160

    这里每一个节点都表示一个表达式,可能是一个二元运算,也可能是一个常量或者参数等,如上图中的ParameterExpression就是一个参数表达式,ConstantExpression是一个常量表达式,BinaryExpression是一个二元表达式。我们也可以在Visual Studio中使用Expression Tree Visualizer来查看该表达式目录树:

    TerryLee_0166

    查看结果如下图所示:

    TerryLee_0162

  • 相关阅读:
    点击<a>页面跳转解决办法/跨域请求,JSONP
    笔记一下NODEJS建站
    地精排序Gnome Sort ----(排序算法十)
    鸡尾酒排序Cocktail Sort(排序算法九)
    鸽巢排序Pigeonhole Sort----(排序算法八)
    桶排序(Bucket Sort)----(排序算法七)
    堆排序----(排序算法六)
    简单选择排序算法----(排序算法五)
    快速排序----(排序算法四)
    冒泡排序法---排序算法(三)
  • 原文地址:https://www.cnblogs.com/meilibao/p/2681327.html
Copyright © 2011-2022 走看看