以下LINQ:嵌套LINQ返回這種方法不能被翻譯成店表達異常
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();
是給我這個錯誤:
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.
這裏有兩個DTO類:
[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; }
}
問題是子選擇和JobDetails列表。我嘗試添加KnownType,但沒有奏效。
這一切都在LINQ墊正常工作。
任何想法?
乾杯
史蒂夫
我認爲你是正確的方向,但是這給了我不能隱式轉換類型'System.Linq.IQueryable'到System.Collections.Generic.List 」。 –
2010-09-27 03:18:04
如果將最後一個.ToList()更改爲.AsEnumerable()。ToList(),會出現什麼錯誤(如果有)? – 2010-09-27 03:21:30
現在的問題是您的DTO無法很好地映射到您的查詢。讓你的DTO接受一個IEnumerable,或做單獨的查詢。 –
2010-09-27 03:43:24