private ISelectQueryAble <T> SelectParser(Expression expression, Expression expressionBody, params Type[] types)
        {
            _SqlBuilder.SetSqlCommandType(SqlCommandType.Select);
            _SqlBuilder.SetTableAlias(_MainTableName);

            _SqlBuilder.AppendSelectSql($"SELECT {{0}} FROM {_MainTableName} {_SqlBuilder.GetTableAlias(_MainTableName)} ");

            var selectQueryAble = new SelectQueryAble <T>(_SqlBuilder, _DapperKitProvider);

            if (expression != null && expressionBody != null)
            {
                if (types != null && types.Length > 0)
                {
                    _SqlBuilder.SetSelectMultiTable();

                    foreach (var type in types)
                    {
                        string tableName = type.GetDapperTableName(_SqlBuilder._SqlFormater);
                        _SqlBuilder.SetTableAlias(tableName);

                        //add data table type to collection
                        selectQueryAble.TableTypeCollections.Add(type);
                    }
                }

                SqlVistorProvider.Select(expressionBody, _SqlBuilder);
            }
            else
            {
                _SqlBuilder.AddSelectColumn("* ");
                _SqlBuilder.AddSelectPageColumn("* ");
            }

            return(selectQueryAble);
        }