public string Translate <TBO>(Expression expression) where TBO : IBusinessObject
        {
            var bo = BoActivator.GetInstance(typeof(TBO));

            boType = bo.GetType();

            sb = new StringBuilder();
            Visit(expression);


            var matchCollection = new Regex("'%(?<variable>('.*?'))%'").MatchNamedCaptures(sb.ToString());

            WhereClause = matchCollection.ContainsKey("variable")
                              ? sb.ToString().Replace(matchCollection["variable"], matchCollection["variable"].Trim('\''))
                              : sb.ToString();

            var querySb = new StringBuilder($"SELECT * FROM {bo.ClassName} ");

            if (!string.IsNullOrEmpty(WhereClause))
            {
                querySb.Append($"WHERE {WhereClause} ");
            }
            if (!string.IsNullOrEmpty(OrderBy))
            {
                querySb.Append($"ORDER BY {OrderBy} ");
            }
            if (Skip.HasValue)
            {
                querySb.Append($"SKIP {Skip.Value} ");
            }
            if (Take.HasValue)
            {
                querySb.Append($"LIMIT {Take.Value} ");
            }


            return(querySb.ToString());
        }