public IDisjunction <T> Add(ICriterion <T> criterion)
        {
            var crit = QueryBuilderUtil.GetCriterion(criterion);

            Disjunction.Add(crit);
            return(this);
        }
        public IQueryBuilder <T> And(ICriterion <T> criterion)
        {
            var crit = QueryBuilderUtil.GetCriterion(criterion);

            _query.And(crit);
            return(this);
        }
        public IQueryBuilder <T> And(IDisjunction <T> disjunction)
        {
            var disj = QueryBuilderUtil.GetDisjunction(disjunction);

            _query.And(disj);
            return(this);
        }
        public IQueryBuilder <T> And(IConjunction <T> conjunction)
        {
            var conj = QueryBuilderUtil.GetConjunction(conjunction);

            _query.And(conj);
            return(this);
        }
        public ICriterion <T> HasBit(TValue value)
        {
            var exp = QueryBuilderUtil.ConvertExpression(_expression);

            return(new NHibernateCriterion <T>(BitwiseExpression.On(exp).HasBit(value)));
        }
        public ICriterion <T> In(IEnumerable <TValue> values)
        {
            var exp = QueryBuilderUtil.ConvertExpression(_expression);

            return(new NHibernateCriterion <T>(Restrictions.On(exp).IsIn(values.ToArray())));
        }