其他分享
首页 > 其他分享> > XPO笔记7:XPO数据过滤功能的实现(二)

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