DbExpressions.SQLiteQueryTranslator.VisitSelectExpression C# (CSharp) Method

VisitSelectExpression() protected method

Translates the selectExpression into a string representation.
protected VisitSelectExpression ( DbSelectExpression selectExpression ) : DbExpression
selectExpression DbSelectExpression The to translate.
return DbExpression
        protected override DbExpression VisitSelectExpression(DbSelectExpression selectExpression)
        {
            var sb = new StringBuilder();
            if (!selectExpression.ProjectionExpression.IsNull())
            {
                if (selectExpression.IsDistinct)
                    sb.Append("SELECT DISTINCT ");
                else
                    sb.Append("SELECT ");
                sb.AppendLine();
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.ProjectionExpression));
            }

            if (!selectExpression.FromExpression.IsNull())
            {
                sb.AppendLine();
                sb.AppendLine("FROM ");
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.FromExpression));
            }

            if (!selectExpression.WhereExpression.IsNull())
            {
                sb.AppendLine();
                sb.AppendLine("WHERE ");
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.WhereExpression));
            }

            if (!selectExpression.GroupByExpression.IsNull())
            {
                sb.AppendLine();
                sb.AppendLine("GROUP BY ");
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.GroupByExpression));
            }

            if (!selectExpression.HavingExpression.IsNull())
            {
                sb.AppendLine();
                sb.AppendLine("HAVING ");
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.HavingExpression));
            }

            if (!selectExpression.OrderByExpression.IsNull())
            {
                sb.AppendLine();
                sb.AppendLine("ORDER BY ");
                sb.AppendFormat(1, "{0} ", Visit(selectExpression.OrderByExpression));
            }

            if (ContainsSkipAndTake(selectExpression))
                sb.AppendFormat("LIMIT {0} OFFSET {1} ", Visit(selectExpression.TakeExpression), Visit(selectExpression.SkipExpression));
            else if (ContainsTake(selectExpression))
                sb.AppendFormat("LIMIT {0} ", Visit(selectExpression.TakeExpression));
            else if (ContainsSkip(selectExpression))
                sb.AppendFormat("LIMIT -1 OFFSET {0} ", Visit(selectExpression.SkipExpression));

            if (selectExpression.IsSubQuery)
                return ExpressionFactory.Sql(string.Format("({0})", sb.ToString().Trim()));

            return ExpressionFactory.Sql(sb.ToString().Trim());
        }