- 支持组长~提出疑惑的就是我,确实没接触个这种方式。胡乱用的话怕不“正轨”,被笑话。嘿嘿,多谢组长解惑~
- Vs2010+Vs2008+Mvc3+JQuery(javascript)+log4+EF4.0+XML+HTML+JSON都会。还招人吗?
- 没有上面那么厉害,但是激情不止! CYQ.Data 秋式开源团3 亿都纳威-郑传兵
- MVC会点点。。。
- 观望吧
- 熟悉Vs2010+JQuery(javascript)+HTML,菜鸟级的
- Vs2010+Vs2008+Mvc3+JQuery(javascript)+log4+EF4.0+XML+HTML+JSON 多会点,唯独没什么时间。
- 我观望
- 现在还招人吗?想加入,Email:sam65718@hotmail.com
- 没有定下来的人呢?
关于前段时间本人开发的动态构造表达式的功能,有一部分组员觉得迷惑,不知道该如何使用,或是不知道该用在什么地方,对于因我的工作失误,而对诸君造成的困扰,我在此深表歉意。
因此我将会就这个类库的使用方式,对各位加以一些说明,以弥补我此前工作的不当,请相信我,它远比你们想象的要简单的多,甚至不需要我用太多的笔墨,你只需粗略的看一下演示代码,或许就能知道它该如何使用。
首先让我们来看看,这个类库的结构
Interface:此文件夹只包含了一个接口,即IMethod,它包含了Build方法的签名,此接口用于创建一个条件表达式所需要使用的比较方式,比如T => T.ID 比较方式 0 ,IMethod将负责创建T.ID与0之间的运算符或者一个方法,
比如String.StartsWith。
InterfaceObject:此文件夹即包含了一些不同的比较方式,如图所示
目前支持的运算符包括 !=,=,>=,<=,>,<,和String.StartsWith方法
你可以通过实现IMethod接口,来创建其他的比较方式,看一下这其中的任何一个的代码,你就会知道,它该如何创建,我认为这应该花不了你多少时间,因为它真的非常简单。
Common:Common对象将接受外部传入的用于构造表达式的参数,并返回一个ParameterExpression,一般形式为 obj => obj这个表达式,和一个用于进行比较的表达式参数。
DynamicOrder:此对象包含了动态创建排序表达式的所有元素。
Lambad:这就是创建动态谓词表达式的核心类,看一下它的代码吧
这就是WithAnd所包含的所有代码,它看起来真的非常简单,没有复杂的逻辑,也没有过于冗长的代码,value是用于比较的参数,如果没有则不需要创建此表达式.
程序将判断当前是否已有谓词表达式,如果没有则将当前创建的表达式引用传给Lambad的表达式对象,否则就合并两个表达式对象,这就是这个方法所有的逻辑,我觉得你即使打着像河马张开嘴那么大的哈欠,也应该能轻松理解吧。
下面我将稍微介绍一下Lambad对象该如何使用,为此我写了一个简单的示例程序,用于展示Lambad对象的使用场景与方式。
程序包含一个显示名称为Order的表格,上方包含三个文本框,分别用于对FirstName,LastName,Address三个属性进行筛选,用户可以选择对所有条件进行筛选,或针对其中的任何一个进行筛选,如果按普通的做法,我们会怎么做呢?
我就不把代码写出来了,总之会包含一堆复杂的逻辑分支吧,这种代码即不容易维护,又看起来丑陋无比,如果你还在使用这种方式的话,我建议你可以考虑换一种方式了。
现在让我们看看使用Lambad的查询方式
实际上当你写完上面的所示代码后,你就已经处理了用户可能使用的任何一种筛选方式,他可以只针对FirstName进行筛选,也可以针对FirstName和Address进行筛选,这全都没有问题,因为无论用户如何选择输入,Lambad只会根据三个查询文本框的值来构建表达式,如果判断有输入便会构建针对这个属性的表达式,否则就会忽略。
比如,如果我进行了这样的查询的话
那实际构造的表达式是这样的
Obj => obj.FirstName.StartsWith(“philip”) && obj.Address.StartsWith(“a”)
因为没有输入LastName所有将会忽略对它的构造。
实际上这就是所谓的动态查询,即查询状态不需要你写逻辑代码来进行维护,而是由程序来负责自动完成。
希望以上这篇文章可以帮助你理解Lambad动态表达式的使用方式,如果你还有什么不明白的地方的话,可以联系我,我将就此与你再进行一些探讨。