Poniższy LINQ:Zagnieżdżony LINQ Zwracanie metoda ta nie może być tłumaczone na wyjątku sklep ekspresji
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();
daje mi ten błąd:
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.
Oto dwa dto klas:
[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; }
}
Problem stanowi lista podrzędna i lista JobDetails. Próbowałem dodać KnownType, ale to nie zadziałało.
Wszystko działa dobrze w LINQ Pad.
Wszelkie pomysły?
Cheers
Steve
Myślę, że zmierzamy we właściwym kierunku, ale to daje mi nie można niejawnie przekonwertować typu „System.Linq.IQueryable” do System.Collections.Generic.List ". –
Jaki błąd pojawia się (jeśli występuje), jeśli zmienisz ostatnią metodę .ToList() na .AsEnumerable(). ToList()? –
Problem polega na tym, że Twój DTO nie jest dobrze odwzorowany na twoje zapytania. Pozwól, aby Twój komputer DTO akceptował IEnumerable lub osobne zapytania. –