views:

73

answers:

1

Hi,

Using linq and silverlight got this error....I am using POCO....DTO = POCO

public IEnumerable.....

var query = from d in Context.Documentos
            where d.CodigoEquipamento == documentoDTO.CodigoEquipamento &&
            d.Codigo == tipoEquipamentoDTO.Codigo 
            select new DocumentoDTO 
            {
                Codigo = d.Codigo, 
                CodigoEquipamento = d.CodigoEquipamento 
            }

 return query.AsEnumerable < DocumentoDTO>(); 

ERROR: The entity or complex type 'Model.DocumentoDTO' cannot be constructed in a LINQ to Entities query.

 public class TipoEquipamentoDTO
{
    [Key]
    public virtual int Codigo { get; set; }
    public virtual string Tipo { get; set; }
    public virtual string UsuarioInclusao { get; set; }
    public virtual DateTime DataHoraInclusao { get; set; }
    public virtual string UsuarioAlteracao { get; set; }
    public virtual DateTime DataHoraAlteracao { get; set; }
    public ICollection<DocumentoDTO> DocumentoDTO { get; set; }
}

public class DocumentoDTO
{
    [Key]
    public virtual int Codigo { get; set; }
    public virtual int CodigoTipo { get; set; }
    public virtual int CodigoEquipamento { get; set; }
    public virtual byte[] Documento { get; set; }
    public virtual string Nome { get; set; }
    public virtual string UsuarioInclusao { get; set; }
    public virtual DateTime DataHoraInclusao { get; set; }
    public virtual string UsuarioAlteracao { get; set; }
    public virtual DateTime DataHoraAlteracao { get; set; }
    public TipoEquipamentoDTO TipoEquipamentoDTO { get; set; }

}
+1  A: 

DocumentoDTO is not an Entity Framework class, so you can't select to a type of DocumentoDTO. You'll have to execute the query first by calling query.ToList() only using Entity Framework classes. After that, you can select DocumentoDTO:

 public IEnumerable.....

var query = from d in Context.Documentos
            where d.CodigoEquipamento == documentoDTO.CodigoEquipamento &&
            d.Codigo == tipoEquipamentoDTO.Codigo 
            select new Documento { // Documento is in the context
               Codigo =d.Codigo, 
               CodigoEquipamento = d.CodigoEquipamento 
            });

 return query.ToList().Select(d => new DocumentoDTO 
                                       {
                                         Codigo = d.Codigo,
                                         CodigoEquipamento = d.CodigoEquipamento 
                                       });
Femaref