none
Consulta com relacionamento Muitos para Muitos Entity Framework e Linq RRS feed

  • Pergunta

  • Sou novo com Entity Framework e Linq, então minha dúvida pode ser muito simples, mas está quebrando minha cabeça.

    Possuo duas entidades.

    public class Fornecedor
        {
            public int FornecedorId { get; set; }
            public string Nome { get; set; }
            public virtual ICollection<Municipio> Municipios { get; set; }
        }
    
    
    public class Municipio
        {
            public int MunicipioId { get; set; }
            public string Nome { get; set; }
            public virtual ICollection<Fornecedor> Fornecedores { get; set; }   
        }

    Preciso fazer uma consulta para retornar todos os fornecedores que atendem um determinado município. Vou passar como parâmetro o nome do município, ex. são paulo, e preciso receber uma listagem com todos os fornecedores que atendem este município.

    Espero ter sido claro.

    Obrigado, Alexandre Previatti

    quarta-feira, 23 de dezembro de 2015 02:29

Respostas

  • Boa noite.

    É relativamente simples:

    var mun = "São Paulo";
    var result = contexto.Fornecedores
        .Where(x => x.Municipios
            .Any(y => y.Equals(mun)));
    Tu podes usar um "Contains" no lugar do Equals, caso a busca não precise ser exata (basicamente um LIKE do SQL).


    Att., Rafael Simor

    quarta-feira, 23 de dezembro de 2015 03:57

Todas as Respostas

  • Boa noite.

    É relativamente simples:

    var mun = "São Paulo";
    var result = contexto.Fornecedores
        .Where(x => x.Municipios
            .Any(y => y.Equals(mun)));
    Tu podes usar um "Contains" no lugar do Equals, caso a busca não precise ser exata (basicamente um LIKE do SQL).


    Att., Rafael Simor

    quarta-feira, 23 de dezembro de 2015 03:57
  • Olá Rafael,

    Obrigado pela resposta.

    Supondo que tenha mais uma entidade, por ex. Servico, onde queira consultar quais fornecedores atendem uma determinada cidade e executam um determinado tipo de serviço?

    public class Fornecedor { public int FornecedorId { get; set; } public string Nome { get; set; } public virtual ICollection<Municipio> Municipios { get; set; }
    public virtual ICollection<Servico> Servicos { get; set; }

    } public class Municipio { public int MunicipioId { get; set; } public string Nome { get; set; } public virtual ICollection<Fornecedor> Fornecedores { get; set; } }

    public class Servico { public int ServicoId { get; set; } public string Nome { get; set; } public virtual ICollection<Fornecedor> Fornecedores { get; set; } }

    quarta-feira, 23 de dezembro de 2015 14:17
  • Segue a mesma linha de raciocínio:

    var mun = "São Paulo";
    var ser = "Manutenção";
    var result = contexto.Fornecedores
        .Where(x => x.Municipios
            .Any(y => y.Equals(mun))
            && x.Servicos
                .Any(y => y.Equals(ser)));


    Att., Rafael Simor

    quarta-feira, 23 de dezembro de 2015 18:17