Các LINQ sau:Nested LINQ trả về một phương pháp này có thể không được dịch ra tiếng một ngoại lệ cửa hàng biểu
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();
được đem lại cho tôi lỗi này:
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.
Dưới đây là hai dto lớp:
[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; }
}
Sự cố là chọn phụ và danh sách JobDetails. Tôi đã thử thêm KnownType nhưng nó không hoạt động.
Tất cả đều hoạt động tốt trong LINQ Pad.
Bất kỳ ý tưởng nào?
Cheers
Steve
Tôi nghĩ rằng bạn đang đi đúng hướng, nhưng điều đó mang lại cho tôi Không thể chuyển đổi hoàn toàn loại 'System.Linq.IQueryable' thành System.Collections.Generic.List '. –
Lỗi nào bạn nhận được (nếu có) nếu bạn thay đổi cuối .ToList() thành .AsEnumerable(). ToList()? –
Vấn đề bây giờ là DTO của bạn không lập bản đồ tốt cho các truy vấn của bạn. Hãy để DTO của bạn chấp nhận một số điện thoại IE2umerhoặc thực hiện các truy vấn riêng biệt. –