当前位置: 网学 > 编程文档 > SQL SERVER > 正文

基于业务对象的筛选

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
nbsp;   this.year = year;
       this.month = month;
       this.day = day;
    }
    // 方便使用的一组构造函数
    public DateFilter(DateTime date) : this(date.Year, date.Month, date.Day) { }
    public DateFilter(int year, int month) : this(year, month, 0) { }
    public DateFilter(int year) : this(year, 0, 0) { }
    public DateFilter() : this(0, 0, 0) { }
   
    // 进行数据筛选的主要逻辑
    public virtual bool MatchRule(T item)
    {
       if (year != 0 && year != item.Date.Year)
           return false;

       if (month != 0 && month != item.Date.Month)
           return false;

       if (day != 0 && day != item.Date.Day)
           return false;

       return true;
    }
}

可以看到,Predicate<T>委托类型的方法MatchRule和前面几乎没有区别,唯一的不同是改成了虚拟方法,以便在子类中覆盖它,以支持对更多列(属性)的筛选。还有值得注意的地方是这个泛型类使用了约束,我们要求类型参数T必须实现IDate接口。

实际上这个类通常用作基类(也可以直接使用,非抽象类),现在来看下如果我们希望可以对Country也进行筛选,应该如何扩展它:

// 可以添加对国家的筛选
public class OrderFilter : DateFilter<Order>
{
    private string country;

    public OrderFilter(int year, int month, int day, string country)
       : base(year, month, day)     // 调用基类构造函数
    {
       this.country = country;
    }

    public override bool MatchRule(Order item)
    {
       // 先获取基类关于日期的对比结果
       bool result = base.MatchRule(item);

       if (result == false)     // 如果日期都不满足,直接返回false
           return false;

       // 继续进行 country 的对比
       if (String.IsNullOrEmpty(country) || string.Compare(item.Country, country, true) == 0)
       {
           return true;     
       } else
       {
           return false;
       }
    }
}

页面实现

我们现在为OrderManager类添加一个新方法,使用我们上面创建的OrderFilter,看看它是什么样的,它仅仅是

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号