以下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