[深入浅出.NET]——表达式树分析器尝鲜记

  在Visual Studio 2008 CSharp sample(下载地址)中包含了许多有价值的工具。利用这些工具,开发人员可以更加高效的开发。其中一个工具就是表达式树分析器(Expression Tree Visualizer)

运行环境

OS: Name:     Microsoft(R) Windows(R) Server 2003, Enterprise Edition, Version: 5.2.3790 Service Pack 2 Build 3790,Install Path:C盘。

IDE:Visual Studio 2008 Version 9.0.30729.1 SP,.NET Framework Version 3.5 SP1

使用表达式树分析器

准备使用表达式树分析器

1、  下载Visual Studio 2008 CSharp 实例

2、  解压实例,并执行F6运行ExpressionTreeVisualizer项目(所在位置:…\CSharpSamples\LinqSamples\ExpressionTreeVisualizer),生成dll文件:\CSharpSamples\LinqSamples\ExpressionTreeVisualizer\bin\Debug

3、  拷贝dll到分析器目录

以下两个目录只需放置一个地方即可。

个人使用的分析器目录

一般放置在操作系统盘符C:\Documents and Settings\lion.lv\My Documents\Visual Studio 2008\Visualizers

根据个人喜好我们也可以使用VS2008定制路径:

插图

公共使用分析器目录

比如我的VS2008指定安装在D

D:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\Visualizers

运用表达式树分析器           

场景1:用来查看变量表达式

1、 建立控制台应用程序

增加以下代码到programMain方法中

using System;

using System.Linq.Expressions;

 

namespace ConsoleApplication107

{

    class Program

    {

        static void Main(string[] args)

        {

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

 

            Console.WriteLine(expression);

        }

    }

}

2、 vs运行时查看变量表达式的快速提示

设置断点在WriteLine行,F5运行程序后,鼠标移到expression上时,弹出带有放大镜的小信息框

3、  点击放大镜查看表达式树分析器

当你勾选分析器选项,单击就可以查看到表达式树的所有节点。

场景2:用来查看lambda表达式

在使用LINQ to SQL查询时,我们可以使用表达式树分析器来查看表达式树。在这种场景下,表达式树作为由LINQ to SQL 查询表达式返回的IQueryable变量的成员。

 

小结:

本文主要介绍了如何使用VS2008例子中提供的表达式树分析器。

SourceCode

//Demo1

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

            //Console.WriteLine(expression);

 

            //Demo2

            //var persons = new List<Person> {

            //            new Person{Name="James",Age=19},

            //            new Person {Name = "Alfred", Age=20},

            //            new Person {Name = "Mingle", Age=21},

            //        };

           

            //var selectperson = from p in persons where p.Age >= 20 select p.Name.ToUpper();

            //foreach (var q in selectperson)

            //    Console.WriteLine(q);

            

            ////Demo3 

            DataContext ctx = new DataContext("server=127.0.0.1;database=Northwind;uid=sa;pwd=123456");

            Table<Customer> Customers = ctx.GetTable<Customer>();

            var query = from c in Customers

                        where c.City == "Shanghai"

                        select c;

            foreach (var q in query)

                Console.WriteLine(q.CustomerID);

 

            //Demo4

            //var select = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };

            //DataContext ctx = new DataContext("server=wss-test;database=Northwind;uid=sa;pwd=123456");

            //Table<Customer> Customers = ctx.GetTable<Customer>();

            //var query = from c in Customers

            //            where c.City == "Shanghai"

            //            select c;

            //foreach (var q in query)

            //    Console.WriteLine(q.CustomerID);

        }

    }

    class Person

    {

        public string Name { get; set;}

        public int Age {get;set;}

    }

参考资料:

http://blogs.msdn.com/charlie/archive/2008/02/13/linq-farm-seed-using-the-expression-tree-visualizer.aspx

扩展思考:

1、  表达式树分析器在VS2008中部署的办法在VS2010中无效,哪么我们在VS2010中应该如何使用呢?

posted @ 2009-12-13 20:56  风影极光  阅读(757)  评论(0编辑  收藏  举报