DevExpress XPO笔记8: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是客户端过滤。

posted @ 2022-09-11 20:23  东经115  阅读(84)  评论(0编辑  收藏  举报