aşağıdaki LINQ tercüme edilemez: geri dönenİçiçe LINQ bu yöntem bir mağaza ifade istisnasız
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();
bana bu hatayı veriyor: İşte
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.
sınıflar dto iki:
[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; }
}
Sorun, alt seçim ve JobDetails listesidir. KnownType eklemeyi denedim ama işe yaramadı.
Tüm bunlar LINQ Pad'de düzgün çalışıyor.
Herhangi bir fikrin var mı?
Alkış
Steve
Sana doğru yönde gidiyoruz düşünüyorum, ama bu dolaylı türünü dönüştürülemez bana verir 'System.Linq.IQueryable' System.Collections.Generic.List için '. –
Sonuncu .ToList() 'i .AsEnumerable() olarak değiştirirseniz, hangi hatayı alırsınız(). ToList()? –
Sorun şu ki, DTO'nuz sorgularınıza iyi harita vermiyor. DTO'nuzun bir IEnumerable kabul etmesine izin verin veya sorguları ayrı yapın. –