none
Join com Lambda e Linq RRS feed

  • Discussão Geral

  • Fala ae galera,

    Preciso de uma ajuda no que diz respeito a join com lambda e linq

    Segue meu código para ajudar:

    public IList<Medico> FindAll()
            {
                var q = db.Medicos.Join(db.Especialidades,
                             m => m.id,
                             e => e.id, (m, e) => new
                                {
                                    Código = m.id,
                                    NomeMedico = m.nome,
                                    DescricaoEspecialidade = e.descricao,
                                });
                return q;
            }

    Preciso coletar lista todos os médico com suas respectivas especialidades mas apresenta o erro na hora de retornar o var:

    Alguém consegue me ajudar.

    Obrigado.


    Jefferson J. Santos Analista de Suporte Remoto Scopus Tecnologia. Se a resposta foi útil de alguma forma, classifique.

    terça-feira, 29 de julho de 2014 02:02

Todas as Respostas

  • Boa tarde,

    Tenta converter o resultado pra list

    return q.ToList();

    att


    1000ton Analista de Sistema Plastripel - Barretos @MiltonFilho

    terça-feira, 19 de agosto de 2014 18:39
  • public IList<Medico> FindAll()
            {

        IList<Medico> retorno = new List<Medico>();

                var q = db.Medicos.Join(db.Especialidades,
                             m => m.id,
                             e => e.id, (m, e) => new
                                {
                                    Código = m.id,
                                    NomeMedico = m.nome,
                                    DescricaoEspecialidade = e.descricao,
                                });

        foreach(m in q.ToList())

    {

    Medico medico = new Medico();

    //preenche as propriedades necessárias;

    retorno.Add(medico);

    }

                return retorno;
            }

    //O problema ocorre porque o retorno do método espera um IList<Medico> e você está retornando um IEnumerable<anonymous>

    //Portando tem que tratar o retorno, se o Medico não for uma entidade do EF, então voce pode fazer o seguinte 

    public IList<Medico> FindAll()
            {
                var q = db.Medicos.Join(db.Especialidades,
                             m => m.id,
                             e => e.id, (m, e) => new Medico
                                {
                                    Código = m.id,
                                    NomeMedico = m.nome,
                                    DescricaoEspecialidade = e.descricao,
                                });
                return q.ToList();
            }

    terça-feira, 19 de agosto de 2014 19:57
  • Vejo muita gente com o mesmo problema, tentar utilizar o LINQ como SQL comum.

    Para carregar os médicos e respectivas especialidades não é necessário o join.

    Você pode incluir as especialidades de cada médico na coleção usando "eager loading" ou "lazy loading", cada uma das técnicas tem suas vantagens e desvantagens.

    Só para exemplicar usando "eager loading" sua query linq ficaria mais ou menos assim:

    public IList FindAll()
    {
        return (from c in db.Medicos.Include("Especialidades") select new {...}).ToList();
    }

    quarta-feira, 20 de agosto de 2014 03:05
    Moderador