为什么我需要 Expression Tree?
它有什么好处?
实际项目中有可能用到它么?
它可以应用在哪些地方?
… …
以上是很多不认识Expression Tree,或刚接触不久的童鞋们所困惑的问题。实际上,上面这些问题在他们心中只是归纳成一个问题——Expression Tree 值不值得我去学?
于是乎,大多数技术诞生时都会伴随着Showcase,Getting Started,Tutorial,Sample Application等。大学某些导师就是没有得这一窍门,在开课的{dy}天没有花时间去展示他所教导的课程的Showcase,以至于童鞋们感到very boring,没有动力学下去。关于这一点,当初教导我编程语言的老师经过一段时间后明白了。她在开课前一个月都是讲语法,什么if else for while 啊,发现童鞋们睡倒一大片。于是,她用她所教导的语言编写了几个图形游戏,如打乒乓球之类的。那一堂课,童鞋们专心多了,而我也知道编程不只用于加减乘除了。
严格来说,Expression Tree 是个低调的家伙,以至于它的光芒被其他上层建筑挡住了,如Linq to SQL。因此,也很难找到能让大家眼前一亮的Showcase,而只能限于代码级别去展示。
var queryBuilder = QueryBuilder.Create<Order>() .Like(c => c.Customer.ContactName, txtCustomer.Text) .Between(c => c.OrderDate, DateTime.Parse(txtDateFrom.Text), DateTime.Parse(txtDateTo.Text)) .Equals(c => c.EmployeeID, int.Parse(ddlEmployee.SelectedValue)) .In(c => c.ShipCountry, selectedCountries);
详见
更多
Linq to Google 示例代码
GoogleContext gc = new GoogleContext(key); var r = from ipods in gc.products where ipods.BaseQuery == "mp3 players" && ipods.Brand == "apple" && ipods.FeedType == "snippets" && ipods.Price < 200 orderby ipods.Price select new { ipods.Title, ipods.Price };
更多
var c = new CodeDomGenerator(); c.AddNamespace("Samples").AddClass("TestClass") .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "Print", Emit.stmt(() => Console.WriteLine("Hello, world!")) ); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp)); Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB)); Assembly assembly = c.Compile();
详看
以上示例代码都见不到 Expression Tree 的影子,因为 Expression Tree 是支撑物,默默地成为伟大建筑的一根支柱。
以上示例代码并不是说非用 Expression Tree 不可,底层实现方法有很多,Expression Tree 只是其中一种。
Expression Tree 永远不会孤军作战的, 正如一根支柱不会独立存在那样。