none
Ajuda com filtro em query RRS feed

  • Pergunta

  • Olá pessoal, boa tarde/noite.

    Alguém poderia me dizer como refinar uma consulta com expressão lambda e linq passando mais de uma opção para um único campo? Deixa eu explicar melhor com um exemplo:

    Minha consulta começa assim:

    var query = from Product in db.Products select Product; //lista todos productes no banco 
    query = ????? //aqui vai ter um array com uma lista de categorias de produtos podendo retornar os produtos da categoria 1, 2, 3 ou apenas a 1 ou apenas a 2... mas se for passado mais de uma a consulta deverá retornar o registros das categorias passadas 
    query = query.OrderBy(c => c.ProductId);return(query)

    Como eu faria esse filtro filtrando por um ou mais categorias passada via parâmetro?

    Se alguém puder me ajudar ficarei imensamente grato. 
    Desde já obrigado.

     
    segunda-feira, 20 de janeiro de 2014 19:57

Respostas

  • Jones você já pode aplicar o filtro na select inicial do linq, mas se a intenção é aplicar o filtro depois pode fazer assim:

    var query = from Product in db.Products select Product; //lista todos productes no banco 
    int[] categoriasPermitidas new int[]{ 1, 2, 3 };
    query = query.Where(p => categoriasPermitidas.Contains(p.idCategoria)); //aqui vai ter um array com uma lista de categorias de produtos podendo retornar os produtos da categoria 1, 2, 3 ou apenas a 1 ou apenas a 2... mas se for passado mais de uma a consulta deverá retornar o registros das categorias passadas 
    query = query.OrderBy(c => c.ProductId);return(query)

    Assim o array de inteiro categoriasPermtidas varia conforme a necessidsade do usuário, poderia assim ser recebido como param. do método.

    segunda-feira, 20 de janeiro de 2014 20:09

Todas as Respostas

  • Jones você já pode aplicar o filtro na select inicial do linq, mas se a intenção é aplicar o filtro depois pode fazer assim:

    var query = from Product in db.Products select Product; //lista todos productes no banco 
    int[] categoriasPermitidas new int[]{ 1, 2, 3 };
    query = query.Where(p => categoriasPermitidas.Contains(p.idCategoria)); //aqui vai ter um array com uma lista de categorias de produtos podendo retornar os produtos da categoria 1, 2, 3 ou apenas a 1 ou apenas a 2... mas se for passado mais de uma a consulta deverá retornar o registros das categorias passadas 
    query = query.OrderBy(c => c.ProductId);return(query)

    Assim o array de inteiro categoriasPermtidas varia conforme a necessidsade do usuário, poderia assim ser recebido como param. do método.

    segunda-feira, 20 de janeiro de 2014 20:09
  • Lucas, acredito que o fluxo seja o inverso, 

    Ou seja, eu preciso pesquisar no campo "CategoryId" da tabela "Product"... de maneira que possa filtrar um ou mais opções... logo o método que vc me passou, me parece ser o inverso... 

    seria algo como:

    query = query.Where(p => CategoryId.Contains(ARRAY_DE_OPCOES)); //aqui vai ter um array com uma lista de categorias de produtos podendo retornar os produtos da categoria 1, 2, 3 ou apenas a 1 ou apenas a 2... mas se for passado mais de uma a consulta deverá retornar o registros das categorias passadas 

    Mas utilizando essa lógica não está funcionando...

    :(

    segunda-feira, 20 de janeiro de 2014 20:22
  • Jones Santos,

    Você testou a forma que o Lucas deixou acima??? vc quer criar uma query linq que faça a mesma coisa q o a clausula in do sql faz certo? se for tem q fazer exatamente igual a que o Lucas mostrou q irá funcionar........



    Diego Almeida Barreto
    System Analyst / Software Developer

    segunda-feira, 20 de janeiro de 2014 21:05
  • Jones o exemplo que mandei seria o equivalente em sql:

    select * from Product where CategoryId in (1,2,3)

    Para o linq daquela forma seria dizer para a linguagem selecione da coleção query todas instancias da coleção onde a propriedade CategoryId está contida no array ARRAY_DE_OPCOES.

    segunda-feira, 20 de janeiro de 2014 21:16