条件对象运算符重载&(and),|(or)
有天和朋友讨论数据组件(HFSoft.Data)的条件对象,大家都让同条件对象在构造复杂点的条件时很不方便,维护起来也很麻烦.如:((OrderID>10600) and Order < 10700)) or (OrderID >10800 and OrderID<10900)),通过条件对象构造的确很不直观和后期难以维护.比这复杂的的SQL条件在开发中是经常碰到的!在这各情况下用条件对象会让程序变得更糟糕!后来他提出了一个意见说能不能把条件对象加上运算符重载,并发来相关技术应用网址.
看完资料后敲了一下自己的脑袋,这东西自己竟然没有想到(基础没打好!),条件对象加了运算符重载后使用方便和简洁多了.以上面的条件例重载后的查询对象表达式:((exp1&exp2)|(exp3&exp4)).得到的效果自己也意想不到,运算符重载真是一个不错误的功能,可惜以前没有想到过!
((OrderID>10600) and Order < 10700)) or (OrderID >10800 and OrderID<10900)) or EmployeeID=1
运用条件对象查询代码如下:
using(HFSoft.Data.IDataSession session = HFSoft.Data.MappingContainer.ConfigContainer.OpenSession())
{
Expression exp1 = ExpressionFactory.Rt("OrderID",10600)& ExpressionFactory.Le("OrderID",10700);
Expression exp2 = ExpressionFactory.Rt("OrderID",10800)& ExpressionFactory.Le("OrderID",10900);
session.Open();
System.Collections.IList list = session.List(typeof(Northwind.Entitys.Orders),(exp1 | exp2) | ExpressionFactory.Eq("EmployeeID",1));
this.dataGrid1.DataSource = list;
}
事例代码
看完资料后敲了一下自己的脑袋,这东西自己竟然没有想到(基础没打好!),条件对象加了运算符重载后使用方便和简洁多了.以上面的条件例重载后的查询对象表达式:((exp1&exp2)|(exp3&exp4)).得到的效果自己也意想不到,运算符重载真是一个不错误的功能,可惜以前没有想到过!
((OrderID>10600) and Order < 10700)) or (OrderID >10800 and OrderID<10900)) or EmployeeID=1
运用条件对象查询代码如下:
using(HFSoft.Data.IDataSession session = HFSoft.Data.MappingContainer.ConfigContainer.OpenSession())
{
Expression exp1 = ExpressionFactory.Rt("OrderID",10600)& ExpressionFactory.Le("OrderID",10700);
Expression exp2 = ExpressionFactory.Rt("OrderID",10800)& ExpressionFactory.Le("OrderID",10900);
session.Open();
System.Collections.IList list = session.List(typeof(Northwind.Entitys.Orders),(exp1 | exp2) | ExpressionFactory.Eq("EmployeeID",1));
this.dataGrid1.DataSource = list;
}
事例代码