嵌套LINQ返回这种方法不能被翻译成店表情异常 [英] Nested LINQ returning a this method cannot be translated into a store expression exception
问题描述
下面的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();
是给我这个错误:
is giving me this error:
LINQ实体无法识别方法
位System.Collections.Generic.List`1 [KernWcfTest.DataTransferObjects.JobDetailDto]
了ToList [JobDetailDto](System.Collections.Generic .IEnumerable`1 [KernWcfTest.DataTransferObjects.JobDetailDto])'方法,
和这种方法不能被翻译成商店表达
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,但没有奏效。
The problem is the sub-select and the JobDetails list. I tried adding the KnownType but it didn't work.
这所有的作品在LINQ垫罚款。
This all works fine in LINQ Pad.
任何想法?
干杯
史蒂夫
推荐答案
别ŧ调用了ToList的内部查询(一个为JobDetails)。错误是这你所说的.ToList方法 - 它不能被转换为T-SQL!
Don't call ToList on the inner query (the one for JobDetails). The error is "This .ToList method you speak of -- it can't be translated to T-SQL!"
这应该工作:
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在查询的结尾,因为这部分并不需要转换为T-SQL。
Note that you can call ToList on the end of the query, as that part doesn't need to be translated to T-SQL.
这篇关于嵌套LINQ返回这种方法不能被翻译成店表情异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!