Inquiridor
Problemas com Linq

Pergunta
-
Pessoal,
Boa Tarde!
Estou fazendo uma query com linq usando o código abaixo. Estou buscando imoveis(db.imovel) e para cada imovel trazer a foto correspondente(db.fotoimovel). O detalhe é q para cada imovel pode-se ter várias fotos e nesse caso gostaria que retornasse apenas uma. Quando realizo a query retorna vários imoveis, o mesmo imóvel para cada foto.
Linq
var retorno = (from c in db.imovel join p in db.fotoimovel on c.idImovel equals p.idImovel where c.idImovel == codigo select new DadosImovel { Id = c.idImovel, Titulo = c.TituloImovel, Descricao = c.DescricaoImovel, Foto = p.NomeFotoImovel, TipoImovel = c.TipoImovel, Endereco = c.EnderecoImovel, Complemento = c.ComplementoImovel, Bairro = c.BairroImovel, Cidade = c.CidadeImovel, Estado = c.EstadoImovel, CEP = c.CEPImovel, MetragemImovel = c.MetragemImovel, QtdComodoImovel = c.QtdComodoImovel, QtdQuartoImovel = c.QtdQuartoImovel, QtdBanheiroImovel = c.QtdBanheiroImovel, QtdVagaGaragemImovel = c.QtdVagaGaragemImovel, QtdAndarImovel = c.QtdAndarImovel, Status = c.StatusImovel, Ativo = c.AtivoImovel }).ToList().Distinct();
Agradeço se alguém puder ajudar.
[]´s, Rodney Oliveira
Todas as Respostas
-
-
-
-
Se a entidade fotoimovel for uma propriedade de navegação da entidade imovel não é necessário usar o join. Você pode obter o primeiro item da coleção usando o FirstOrDefault().
var retorno = (from c in db.imovel where c.idImovel == codigo select new DadosImovel { Id = c.idImovel, Titulo = c.TituloImovel, Descricao = c.DescricaoImovel, Foto = c.fotoimovel.FirstOrDefault().NomeFotoImovel, TipoImovel = c.TipoImovel, Endereco = c.EnderecoImovel, Complemento = c.ComplementoImovel, Bairro = c.BairroImovel, Cidade = c.CidadeImovel, Estado = c.EstadoImovel, CEP = c.CEPImovel, MetragemImovel = c.MetragemImovel, QtdComodoImovel = c.QtdComodoImovel, QtdQuartoImovel = c.QtdQuartoImovel, QtdBanheiroImovel = c.QtdBanheiroImovel, QtdVagaGaragemImovel = c.QtdVagaGaragemImovel, QtdAndarImovel = c.QtdAndarImovel, Status = c.StatusImovel, Ativo = c.AtivoImovel }).ToList();
Caso você não tenha criado a propriedade de navegação você poderia utilizar o group by pelo idImovel em vez de usar o Distinct().
Obs. 1: Você está filtrando a consulta pelo idImovel, este campo é uma chave primária? Se for, a consulta retornará um único registro ao invés de uma lista.
Obs. 2: Quando digo propriedade de navegação me refiro a um public virtual ICollection<fotoimovel> fotoimovel { get; set; } na entidade imovel.Leonardo Lima da Silva
- Sugerido como Resposta Leonardo Lima da Silva quinta-feira, 18 de abril de 2013 22:30