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 @   东经115  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示