none
Orderby coluna generica dinamica. RRS feed

  • Pergunta

  • Slave galera.

    Seguinte estou com uma dificuldade em fazer uma coisa aparentemente simples, segue o código.

    foreach (PropertyInfo property in properties)
                {
                    object propertyValue = property.GetValue(p, null);
                    
                    if (((System.Reflection.MemberInfo)(property)).Name == campoOrdenacao)
                    {
    
                       
                        var listaPaginada = listaClientes.OrderBy(a >= a."campoOrdenacao")
                                                            .Skip((indicePaginaAtual - 1) * itensPorPagina)
                                                            .Take(itensPorPagina).ToArray();
    
                      
                    }
                }
     

    No código acima recebo um parametro (campoOrdenacao) como posso implementar este parametro no orderby, sabendo que ele tem um nome da propriedade da classe sem precisar fazer if, queria fazer direto no orderby.

    Obrigado.

    quarta-feira, 20 de fevereiro de 2013 14:25

Todas as Respostas

  • Galerinha consegui segue o código.

    //chamada do método.
    SortGridGenerico(ref listaClientes, sortorder == "desc" ? SortDirection.Descending : SortDirection.Ascending, campoOrdenacao);
    
    
            /// <summary>
            /// Método para sort generico.
            /// </summary>
            /// <typeparam name="T">Tipo de parametro</typeparam>
            /// <param name="lista">Objeto lista</param>
            /// <param name="sort">Asc ou Desc</param>
            /// <param name="propriedadeAOrdenar">Campo da tabela ou prop da classe tipada.</param>
            public void SortGridGenerico<T>(ref List<T> lista, System.Web.Helpers.SortDirection sort, string propriedadeAOrdenar)
            {
    
                if (!string.IsNullOrEmpty(propriedadeAOrdenar)
                && lista != null
                && lista.Count > 0)
                {
    
                    Type t = lista[0].GetType();
    
                    if (sort == System.Web.Helpers.SortDirection.Ascending)
                    {
    
                        lista = lista.OrderBy(
                            a => t.InvokeMember(
                                propriedadeAOrdenar
                                , System.Reflection.BindingFlags.GetProperty
                                , null
                                , a
                                , null
                            )
                        ).ToList();
                    }
                    else
                    {
                        lista = lista.OrderByDescending(
                            a => t.InvokeMember(
                                propriedadeAOrdenar
                                , System.Reflection.BindingFlags.GetProperty
                                , null
                                , a
                                , null
                            )
                        ).ToList();
                    }
                }
            }

    Muito bom eu recomendo!

    quarta-feira, 20 de fevereiro de 2013 15:58