嵌套LINQ返回这种方法不能被翻译成店表情异常 [英] Nested LINQ returning a this method cannot be translated into a store expression exception

查看:239
本文介绍了嵌套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();



是给我这个错误:

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆