秋式开源团队-Web3组

秋式开源团队-Web3组,以新技术asp.net mvc的方式传释快速开发的理念
公告信息
公告内容
文章搜索
文章分类
文章档案
文章
WebC.BBS 框架DynamicExperssion层使用说明 作者:郑思炜
2011/7/4 23:28:16

关于前段时间本人开发的动态构造表达式的功能,有一部分组员觉得迷惑,不知道该如何使用,或是不知道该用在什么地方,对于因我的工作失误,而对诸君造成的困扰,我在此深表歉意。

因此我将会就这个类库的使用方式,对各位加以一些说明,以弥补我此前工作的不当,请相信我,它远比你们想象的要简单的多,甚至不需要我用太多的笔墨,你只需粗略的看一下演示代码,或许就能知道它该如何使用。

首先让我们来看看,这个类库的结构

clip_image001

Interface:此文件夹只包含了一个接口,即IMethod,它包含了Build方法的签名,此接口用于创建一个条件表达式所需要使用的比较方式,比如T => T.ID 比较方式 0 ,IMethod将负责创建T.ID与0之间的运算符或者一个方法,

比如String.StartsWith。

InterfaceObject:此文件夹即包含了一些不同的比较方式,如图所示

clip_image002

目前支持的运算符包括 !=,=,>=,<=,>,<,和String.StartsWith方法

你可以通过实现IMethod接口,来创建其他的比较方式,看一下这其中的任何一个的代码,你就会知道,它该如何创建,我认为这应该花不了你多少时间,因为它真的非常简单。

Common:Common对象将接受外部传入的用于构造表达式的参数,并返回一个ParameterExpression,一般形式为 obj => obj这个表达式,和一个用于进行比较的表达式参数。

DynamicOrder:此对象包含了动态创建排序表达式的所有元素。

Lambad:这就是创建动态谓词表达式的核心类,看一下它的代码吧

clip_image004

这就是WithAnd所包含的所有代码,它看起来真的非常简单,没有复杂的逻辑,也没有过于冗长的代码,value是用于比较的参数,如果没有则不需要创建此表达式.

程序将判断当前是否已有谓词表达式,如果没有则将当前创建的表达式引用传给Lambad的表达式对象,否则就合并两个表达式对象,这就是这个方法所有的逻辑,我觉得你即使打着像河马张开嘴那么大的哈欠,也应该能轻松理解吧。

下面我将稍微介绍一下Lambad对象该如何使用,为此我写了一个简单的示例程序,用于展示Lambad对象的使用场景与方式。

clip_image006

程序包含一个显示名称为Order的表格,上方包含三个文本框,分别用于对FirstName,LastName,Address三个属性进行筛选,用户可以选择对所有条件进行筛选,或针对其中的任何一个进行筛选,如果按普通的做法,我们会怎么做呢?

我就不把代码写出来了,总之会包含一堆复杂的逻辑分支吧,这种代码即不容易维护,又看起来丑陋无比,如果你还在使用这种方式的话,我建议你可以考虑换一种方式了。

现在让我们看看使用Lambad的查询方式

clip_image008

实际上当你写完上面的所示代码后,你就已经处理了用户可能使用的任何一种筛选方式,他可以只针对FirstName进行筛选,也可以针对FirstName和Address进行筛选,这全都没有问题,因为无论用户如何选择输入,Lambad只会根据三个查询文本框的值来构建表达式,如果判断有输入便会构建针对这个属性的表达式,否则就会忽略。

比如,如果我进行了这样的查询的话

clip_image010

那实际构造的表达式是这样的

Obj => obj.FirstName.StartsWith(“philip”) && obj.Address.StartsWith(“a”)

因为没有输入LastName所有将会忽略对它的构造。

实际上这就是所谓的动态查询,即查询状态不需要你写逻辑代码来进行维护,而是由程序来负责自动完成。

希望以上这篇文章可以帮助你理解Lambad动态表达式的使用方式,如果你还有什么不明白的地方的话,可以联系我,我将就此与你再进行一些探讨。

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"
 MyQBlog   浏览(3313)   评论(1)   关键字 webc.bbs 框架dynamicexperssion层使用说明 作者,郑思炜
kulong : 2011/7/4 23:38:35
支持组长~提出疑惑的就是我,确实没接触个这种方式。胡乱用的话怕不“正轨”,被笑话。嘿嘿,多谢组长解惑~
回复呵呵,作者是:郑思炜
  
Copyright © 2010-2020 power by CYQ.Blog - 秋色园 v2.0 All Rights Reserved