Ordem.cs

<< Click to Display Table of Contents >>

Navigation:  Persistencia > Persistencia > banco >

Ordem.cs

Previous pageReturn to chapter overviewNext page

using System;

using System.Linq.Expressions;

using System.Text;

using Modelo.classes;

 

namespace Persistencia.banco

{

    public enum OrdemTipo { Asc, Desc };

 

    /// <summary>

    /// Classe de uso interno, para montar order by para SQL

    /// </summary>

    public class Ordem

    {

        private StringBuilder orderBy;

        

        public Ordem() 

        {

            this.orderBy = new StringBuilder();

        }

 

        /// <summary>

        /// adiciona um campo para ordenar um select (use o ToString())

        /// </summary>

        /// <param name="exp">Propridade em formato expressão Lambda (() => x.Nome)</param>

        /// <param name="obj">Instância do objeto que contém a propriedade do primeiro parâmetro (ex: p)</param>

        /// <param name="operador">OrdemTipo.Asc (default) ou OrderTipo.Desc</param>

        public Ordem Add<T, O>(Expression<Func<T>> exp, O obj, OrdemTipo tipo = OrdemTipo.Asc)

        {

            string campo = Auxiliar.GetFieldName(exp, obj);

            this.Add(campo, tipo);

            return this;

        }

 

        /// <summary>

        /// veja o outro overload para exemplo (é igual, só troca os dois primeiros parâmetros pelo nome do campo em string

        /// </summary>

        public Ordem Add(string nomeCampo, OrdemTipo tipo = OrdemTipo.Asc)

        {

            if (this.orderBy.Length > 0)

                this.orderBy.Append(",");

 

            this.orderBy.Append(nomeCampo);

            

            if (tipo == OrdemTipo.Desc)

                this.orderBy.Append(" desc");

        

            return this;

        }

 

        public void Clear()

        {

            this.orderBy.Clear();

        }

 

        /// <summary>

        /// retorna em formato SQL os campos para order by

        /// </summary>

        public override string ToString()

        {

            return this.orderBy.ToString();

        }

    }

}