none
Buscar com query escrita e Entity Framework RRS feed

  • Pergunta

  • Boa Tarde,

     

    Eu gostaria de utilizar uma query escrita na minha consulta. EX:

     

    Eu tenho algo como isso:

     

    lista = dao.Buscar(expressao).OrderBy(AQUI_EU_QUERIA_UMA_QUERY_ESCRITA)

     

    gostaria de algo como :

     

    lista = dao.Buscar(expressao).OrderBy("nome");

    ou uma expressão lamda escrita.

     

    Algo que me ajudasse nesse contexto para não ter que fazer um switch case.

     

    Obrigado.


    Att, Hugo S. Mendes
    sexta-feira, 29 de julho de 2011 18:37

Respostas

  • Olá Hugo,

    Andei pesquisando e acredito que é possível fazer oq deseja utilizando Dynamic LINQ...

    Algo mto legal por sinal...

    Segue link:
    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

     

    Parece que é uma biblioteca free...

     

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Hugo S. Mendes segunda-feira, 1 de agosto de 2011 12:41
    segunda-feira, 1 de agosto de 2011 02:52
    Moderador

Todas as Respostas

  • Olá Hugo,

    Tudo bem?

    O LINQ utilizar estruturas de dados tipadas. Não sei se é possível utilizar uma string como chave ordenadora das consultas.

    É preciso pesquisar, eu pelo menos acho difícil, por essa questão de utilizar dados tipados.

    Mas, uma solução para o seu problema, para que seja necessário reproduzir diversas vezes a mesma query LINQ, é passar por parâmetro o dado que a função ordenadora.

    Segue o código:

    public void TestOrdenar()
    {
      List<Cliente> result1 = Ordernar(c => c.Nome);
    
      List<Cliente> result2 = Ordernar(c => c.Id.ToString());
    }
        
    public class Cliente
    {
      public int Id { get; set; }
    
      public string Nome { get; set; }
    }
    
    public List<Cliente> Ordernar(Func<Cliente, string> selector)
    {
      List<Cliente> lista = new List<Cliente>();
    
      lista.Add(new Cliente() { Id = 0, Nome = "F" });
      lista.Add(new Cliente() { Id = 1, Nome = "L" });
      lista.Add(new Cliente() { Id = 2, Nome = "A" });
      lista.Add(new Cliente() { Id = 3, Nome = "V" });
      lista.Add(new Cliente() { Id = 4, Nome = "I" });
      lista.Add(new Cliente() { Id = 5, Nome = "A" });
    
      var query = lista.OrderBy(selector);
    
      return query.ToList();
    }
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sábado, 30 de julho de 2011 18:59
    Moderador
  • Fernando,

     

    Obrigado por responder.

     

    Dessa forma eu já estava fazendo.

    O problema é que eu vou ter que colocar um case para saber qual a ordem eu quero, entende?

     

    exemplo:

     

    se eu clico numa coluna que ordena por nome eu vou ter q ter um case que chama q=> q.Nome

    se for idade: q=> q.Idade

     

    só que aí eu n vou ter o q eu realmente quero

     

    que seria apenas passar tipo

    string minhaOrdem = "q=> q.Nome";

    Orderby(minhaOrdem)


    Att, Hugo S. Mendes
    sábado, 30 de julho de 2011 19:53
  • Olá Hugo,

    Andei pesquisando e acredito que é possível fazer oq deseja utilizando Dynamic LINQ...

    Algo mto legal por sinal...

    Segue link:
    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

     

    Parece que é uma biblioteca free...

     

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Hugo S. Mendes segunda-feira, 1 de agosto de 2011 12:41
    segunda-feira, 1 de agosto de 2011 02:52
    Moderador
  • Muito Obrigado, Fernando.

     

    Eu havia encontrado essa biblioteca também.

    só não tinha colocado muita fé nela.. aí nem baixei.

    Mas depois que você falou eu resolvi baixar.

     

    Está funcionando perfeitamente.

    Muito obrigado!


    Att, Hugo S. Mendes
    segunda-feira, 1 de agosto de 2011 12:41