XPO笔记7:XPO数据过滤功能的实现(二)
作者:互联网
XPO数据过滤功能的实现(一)中我们实现了CriteriaOperator的派生类来实现数据过滤,但大家可能会发现一个问题,上面的方法都不是类型安全的,很容易会出现书写的错误,如何避免呢?
我们可以使用新的语法实现数据过滤。
private void btnFilter_Click(object sender, EventArgs e)
{
OperandProperty op1 = new OperandProperty("Name");
OperandProperty op2 = new OperandProperty("Age");
CriteriaOperator co = op1 == "f" & op2 > 20;
xpCollection1.Criteria = co;
}
CriteriaOperator重载了”==“操作符,当然也包括了>,<,>=,以及按位与、按位或运算符,代替逻辑与、逻辑或运算。
虽然重载了==运算符,但每次都要实例化OperandProperty,还是有点麻烦,因此推荐另外一种写法:
首先在Customer实体类中加入一个嵌套类Fields
new public class Fields
{
private Fields() { }
public static OperandProperty Name { get => new OperandProperty("Name"); }
public static OperandProperty Age { get => new OperandProperty("Age"); }
}
然后就可以直接调用嵌套类的静态属性来做比较了。
private void btnFilter_Click(object sender, EventArgs e)
{
//OperandProperty op1 = new OperandProperty("Name");
//OperandProperty op2 = new OperandProperty("Age");
//CriteriaOperator co = op1 == "f" & op2 > 20;
//xpCollection1.Criteria = co;
CriteriaOperator co1 = Customer.Fields.Name == "f";
CriteriaOperator co2 = Customer.Fields.Age > 20;
xpCollection1.Criteria = co1 & co2;
}
最后,要实现过滤可以通过:
xpCollection1.Criteria 和 xpCollection1.Filter
不同的是Criteria是服务端过滤,而Filter是客户端过滤。
标签:XPO,Age,Criteria,笔记,过滤,CriteriaOperator,new,OperandProperty 来源: https://www.cnblogs.com/east115/p/16684615.html