La siguiente LINQ:anidada LINQ La devolución de un este método no puede ser traducido a una excepción de tienda de expresión
retval = (from jm in entities.JobMasters
where jm.UserId == userId && jm.IsRemote == false
select new JobDto
{
JobMasterId = jm.JobMasterId,
ExternalTaskId = jm.ExternalTaskId,
JobDetails = (from jd in entities.JobDetails
where jd.JobMasterId == jm.JobMasterId
select new JobDetailDto { ScreenFieldId = jd.ScreenFieldId, FieldValue = jd.FieldValue }
).ToList()
}
).ToList();
me está dando este error:
LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[KernWcfTest.DataTransferObjects.JobDetailDto] ToList[JobDetailDto](System.Collections.Generic.IEnumerable`1[KernWcfTest.DataTransferObjects.JobDetailDto])' method, and this method cannot be translated into a store expression.
Éstos son los dos dto clases:
[DataContract]
public class JobDetailDto
{
[DataMember]
public int ScreenFieldId { get; set; }
[DataMember]
public string FieldValue { get; set; }
}
[DataContract]
[KnownType(typeof(JobDetailDto))]
public class JobDto
{
[DataMember]
public int JobMasterId { get; set; }
[DataMember]
public string ExternalTaskId { get; set; }
[DataMember]
public List<JobDetailDto> JobDetails { get; set; }
}
El problema es la sub-selección y la lista de JobDetails. Intenté agregar KnownType pero no funcionó.
Todo esto funciona bien en LINQ Pad.
¿Alguna idea?
Saludos
Steve
Creo que va en la dirección correcta, pero eso me da No se puede convertir implícitamente el tipo 'System.Linq.IQueryable' en System.Collections.Generic.List '. –
¿Qué error obtienes (si lo hay) si cambias el último .ToList() a .AsEnumerable(). ToList()? –
El problema ahora es que su DTO no se adapta bien a sus consultas. Deje que su DTO acepte un IEnumerable, o haga consultas separadas. –