public IList <ObterColetaParaConferencia> Pesquisar(PesquisaPacoteViewModel filtros)
        {
            var statusPacote = filtros.PacoteStatus;

            var sql = @"
SELECT P.PACK_CODE PacoteId, P.PACK_IDENTIFICACAO Identificacao, C.COLETA_CODE ColetaId, 
COUNT(DE.DOSSIEESPERADO_CODE) TotalDossies, C.COLETA_DESCRICAO Descricao, C.COLETA_ENDERECO Endereco,
C.COLETA_DATA DataColeta, C.COLETA_DTRECEPCAO DataRecepcao
FROM PACK P INNER JOIN COLETA C ON P.COLETA_CODE = C.COLETA_CODE
LEFT JOIN DOSSIEESPERADO DE ON P.PACK_CODE = DE.PACOTE_CODE
WHERE P.PACK_STATUS = :statusPacote    
GROUP BY P.PACK_CODE, P.PACK_IDENTIFICACAO, C.COLETA_CODE, C.COLETA_DESCRICAO, C.COLETA_ENDERECO,
C.COLETA_DATA, C.COLETA_DTRECEPCAO";

            switch (filtros.ColunaDeOrdenacao)
            {
            case "caixa":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY P.PACK_IDENTIFICACAO ASC" : sql + " ORDER BY P.PACK_IDENTIFICACAO DESC";
                break;

            case "coleta":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY C.COLETA_CODE ASC" : sql + " ORDER BY C.COLETA_CODE DESC";
                break;

            case "descricao":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY C.COLETA_DESCRICAO ASC" : sql + " ORDER BY C.COLETA_DESCRICAO DESC";
                break;

            case "endereco":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY C.COLETA_ENDERECO ASC" : sql + " ORDER BY C.COLETA_ENDERECO DESC";
                break;

            case "dataColeta":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY C.COLETA_DATA ASC" : sql + " ORDER BY C.COLETA_DATA DESC";
                break;

            case "dataRecepcao":
                sql = filtros.TipoDeOrdenacao == "A" ? sql + " ORDER BY C.COLETA_DTRECEPCAO ASC" : sql + " ORDER BY C.COLETA_DTRECEPCAO DESC";
                break;

            default:
                sql = sql + " ORDER BY P.PACK_IDENTIFICACAO";
                break;
            }

            return(this.Session
                   .CreateSQLQuery(sql)
                   .AddScalar("PacoteId", NHibernateUtil.Int32)
                   .AddScalar("Identificacao", NHibernateUtil.String)
                   .AddScalar("ColetaId", NHibernateUtil.Int32)
                   .AddScalar("TotalDossies", NHibernateUtil.Int32)
                   .AddScalar("Descricao", NHibernateUtil.String)
                   .AddScalar("Endereco", NHibernateUtil.String)
                   .AddScalar("DataColeta", NHibernateUtil.DateTime)
                   .AddScalar("DataRecepcao", NHibernateUtil.DateTime)
                   .SetParameter("statusPacote", statusPacote)
                   .SetResultTransformer(CustomResultTransformer <ObterColetaParaConferencia> .Do())
                   .List <ObterColetaParaConferencia>());
        }
        public IList <Pacote> Pesquisar(PesquisaPacoteViewModel filtros)
        {
            Pacote pacote = null;
            Coleta coleta = null;

            var query = this.Session.QueryOver <Pacote>(() => pacote)
                        .JoinAlias(() => pacote.Coleta, () => coleta);

            if (string.IsNullOrEmpty(filtros.PacoteStatus) == false)
            {
                query.Where(() => pacote.Status == filtros.PacoteStatus);
            }

            query.TransformUsing(Transformers.DistinctRootEntity);

            switch (filtros.ColunaDeOrdenacao)
            {
            case "caixa":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => pacote.Identificacao).Asc();
                }
                else
                {
                    query.OrderBy(() => pacote.Identificacao).Desc();
                }

                break;

            case "coleta":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => coleta.Id).Asc();
                }
                else
                {
                    query.OrderBy(() => coleta.Id).Desc();
                }

                break;

            case "descricao":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => coleta.Descricao).Asc();
                }
                else
                {
                    query.OrderBy(() => coleta.Descricao).Desc();
                }

                break;

            case "endereco":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => coleta.Endereco).Asc();
                }
                else
                {
                    query.OrderBy(() => coleta.Endereco).Desc();
                }

                break;

            case "dataColeta":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => coleta.DataColetaRealizada).Asc();
                }
                else
                {
                    query.OrderBy(() => coleta.DataColetaRealizada).Desc();
                }

                break;

            case "dataRecepcao":
                if (filtros.TipoDeOrdenacao == "A")
                {
                    query.OrderBy(() => coleta.DataRecepcao).Asc();
                }
                else
                {
                    query.OrderBy(() => coleta.DataRecepcao).Desc();
                }

                break;
            }

            return(query
                   .List());
        }