<< Click to Display Table of Contents >> Ordem.cs |
![]() ![]() ![]() |
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();
}
}
}