先写一段代码,让大家了解或重温一下什么是链式编程:
        }
这一个基本的查询,执行了三个操作:1.查找FristName以C开头的员工;2.取员工的FirstName;3.将名字排序。
EF中只需要一个语句,通过.将三者链成一个语句。后面还可以链接更多的语句,如果需要。
下面代码作一些演化:
        }

这段代码定义了Peoson类,有三个操作Run、Swim、Sing,操作完成后返回自身this(有返回值是链式编程的关键)。返回自身this好比说执行完操作先别走人,还(可能)有其它操作要去做,如Example2中:先造一个People,先命令ta跑步,跑完先别休息再唱歌,再游泳,游泳完OK了。
链式编程是将多个操作(多行代码)通过点号"."链接在一起成为一句代码。(定义不严密,表达能力好的请给修正一下)
以下为常规代码与链式代码的比较:
        }
为了增强效果,都执行了两轮操作。个人感觉链式代码更加精炼简洁易读。


链式代码要求操作有返回值,但对于很多操作大都是void型,什么也不返回,这样就很难链起来了。当然也有解决办法,可能不太优雅。
本人使用扩展方法解决这个问题,首先引入一个泛型扩展:
        }
下面是调用示例,其中Student类操作都是void型的。
); }
        }
先创建一个学生,先跑再唱再唱,最后把自己名字改一个(哈哈,有点吃饱了撑着的感觉)。
这种使用扩展实现链式编程的方法在我的另一篇文章中使用过,请参考:超精简C#程序代码改进-利用扩展方法简化代码增强可读性,这篇文章是一个探讨极限的文章,由于代码太过于抽象,没得到大家认可。今天写篇文章将 扩展方法 链式编程 单独列出来,欢迎大家讨论。

链式编程的新思想在jQuery中已流行使用,请参见:

相关文章: