public ExecutorResult Execute()
        {
            return(RunDiagnosis.Watch(() =>
            {
                if (!FromComponent.AliasNameMappers.Any())
                {
                    throw new ArgumentException("From");
                }

                var mainTable = FromComponent.AliasNameMappers[0];
                var selectStatement = _options.TemplateBase.CreateSelect(ExtractSelectFields(), mainTable.Key, mainTable.Value);
                var statementResultBuilder = Translate(selectStatement, WhereComponent, FromComponent, JoinComponents);
                JoinComponents.Clear();

                if (PaginationComponent != null)
                {
                    if (OrderComponent == null)
                    {
                        throw new Exception("Order");
                    }
                    var(fields, tableName) = ExtractOrderFields();
                    var orderTemplate = _options.TemplateBase.CreateOrderBy(OrderComponent.OrderBy, $@"{tableName}.{fields}");
                    _options.TemplateBase.CreatePagination(PaginationComponent, orderTemplate, statementResultBuilder.StatmentTemplate);
                }
                else if (OrderComponent != null)
                {
                    var(fields, tableName) = ExtractOrderFields();
                    var orderTemplate = _options.TemplateBase.CreateOrderBy(OrderComponent.OrderBy, $@"{tableName}.{fields}");
                    selectStatement.Append(orderTemplate);
                }

                return _resultExecutor.Execute(statementResultBuilder);
            }));
        }
        public SelectComponent Include <TModel, TModel1>(Expression <Func <TModel, TModel1> > include) where TModel : EntityBase, new()
            where TModel1 : EntityBase, new()
        {
            Check.IfNullOrZero(include);
            var joinComponent = new JoinComponent();

            joinComponent.AddInclude(include);
            JoinComponents.Add(joinComponent);
            return(this);
        }
        public SelectComponent InnerJoin <TLeft, TRight>(Expression <Func <TLeft, TRight, Boolean> > join)
            where TLeft : EntityBase, new()
            where TRight : EntityBase, new()
        {
            Check.IfNullOrZero(join);
            var joinComponent = new JoinComponent();

            joinComponent.AddJoin(join, JoinRelation.INNER);
            JoinComponents.Add(joinComponent);
            return(this);
        }