none
como fazer um "in" em expressões lambda RRS feed

  • Pergunta

  • Bom dia Pessoal.

    Gostaria de saber como eu posso fazer essa expressão T-SQL com linq:

    SELECT * FROM TABLE WHERE CAMPO IN (1,5,10,15)

    Desde já agradeço a atenção de todos.

    Abraços.

    [[|]]'s
    segunda-feira, 1 de março de 2010 14:50

Respostas

  • Eduardo,

    primeiro, gostaria de dizer que no LINQ to SQL funcionou (inclusive ele interpreta o operador 'IN' no SQL), achei que funcionaria também para o LINQ to Entities. Pesquisei sobre essa exceção e realmente o LINQ to Entities não suporta esse tipo de operação. Dê uma olhada nesses posts do forum MSDN aqui e aqui. Os caras discutem esse mesmo problema e no segundo link tem uma solução que aceitaram para esse tipo de problema. 

    Espero que te ajude.
    • Marcado como Resposta Eduardo_CWB segunda-feira, 1 de março de 2010 19:54
    segunda-feira, 1 de março de 2010 19:13

Todas as Respostas

  • Olá Edutardo_CWB,

    acho que não existe um operador de consulta equivalente para o operador t-sql 'IN'. Uma maneira de fazer isso poderia ser assim:

    var campos = new List<int>() 
       {
          1,
          5,
          10,
          15
       };
    
    var query =
       from table in context.tables
       where campos.Contains(table.CAMPO)
       select table;

    Espero ter ajudado.
    segunda-feira, 1 de março de 2010 15:49
  • E ai Wally, blz?

    Cara, desde já agradeço sua atenção.

    Em relação  a dúvida, será mesmo que não existe algo como "in" no linq? Acho estranho, uma vez que isto é básicão em T-SQL.

    Mas de qquer forma agradeço a sugestão amigão.

    Vlw.
    segunda-feira, 1 de março de 2010 17:22
  • Wally, tentei da maneira que vc sugeriu e recebi o seguinte erro:

    [System.NotSupportedException] = {"LINQ to Entities does not recognize the method 'Boolean Contains(Int32)' method, and this method cannot be translated into a store expression."}


    segunda-feira, 1 de março de 2010 18:40
  • Eduardo,

    primeiro, gostaria de dizer que no LINQ to SQL funcionou (inclusive ele interpreta o operador 'IN' no SQL), achei que funcionaria também para o LINQ to Entities. Pesquisei sobre essa exceção e realmente o LINQ to Entities não suporta esse tipo de operação. Dê uma olhada nesses posts do forum MSDN aqui e aqui. Os caras discutem esse mesmo problema e no segundo link tem uma solução que aceitaram para esse tipo de problema. 

    Espero que te ajude.
    • Marcado como Resposta Eduardo_CWB segunda-feira, 1 de março de 2010 19:54
    segunda-feira, 1 de março de 2010 19:13
  • Vlw wally, o segundo link funcionou perfeitamente.

    Muito obrigado pela atenção mais uma vez.

    Valeu mesmo.

    Abraços.


    [[|]]'s
    segunda-feira, 1 de março de 2010 19:54