我在做设计得时候经常遇到这样一个问题,用户经常需要根据不同的条件从数据库中去查找申请单据,比如说,按单号查找,按申请时间查找,类别查找...查找的条件比较不稳定,对使用者需要隐藏SQL语法.
我希望在数据访问层的sql操作的中将WHERE后面的操作独立成一组模块,并且模块之间可以实现自由组合(AND|OR 组合)
比如,我的数据访问层接口IDAL有这样一个定义interface IRequest<T>
{
    //T是申请单据的类型
    IList<T> GetRequestList(IList<condition_obj> condition);
    //客户端调用该接口,传入条件列表,condition_obj需要能够重写ToString方法(将其条件翻译成SQL中WHERE后面的内容)
}我尝试过用哈希表,方式去做这个类,始终不够灵活,难以实现自由组合,所以想请问大家,这个类要如何设计才能够保证灵活性与扩展性呢?有没有比这种方式更好的方式呢?