C#NET LINQ to Entities无法识别该方法

本文关键字:识别 方法 LINQ to Entities C#NET | 更新日期: 2023-09-27 18:21:41

我在尝试执行linq查询时遇到此错误:

LINQ to Entities无法识别方法"System.Collections.Generic.IENnumerable`1[FEI.Eentity.EF6.Tables.HORSE_IDENITY_GENDER]GetHorseIdentityGenderQuery(FEI.Entities.EF6.TTables.HORSE_DOCUMENT_PART)",并且方法无法转换为存储表达式。

我读过很多以前的问题,人们会遇到同样的错误,但我知道这是因为LINQ to Entities需要将整个LINQ查询表达式翻译成服务器查询,因此你不能在其中调用外部方法。我还没能将我的场景转换成有效的方法,我的大脑开始崩溃,所以我希望有人能给我指明正确的方向。我们正在使用实体框架和规范模式(我对这两种模式都不熟悉)。

以下是使用规范的代码:

HORSE_DOCUMENT HorseDocForPart = Bll.GetHorseDocumentForPartUpload(horseId, identityType);

以下是从方法GetHorseDocumentForPartUpload提供的代码

public HORSE_DOCUMENT GetHorseDocumentForPartUpload(int horseID, HorseDocGender identityType)
{
    // Get the unique horse document
    var horseDoc = Tables
        .HORSE_DOCUMENT
        .Where(hd =>
            hd.HORSE_UID == horseID &&
            hd.HORSE_IDENTITY_TYPE.HORSE_IDENTITY_TYPE_FULL_CODE == identityType.ToString() && 
            !hd
                .HORSE_DOCUMENT_PART
                .Any(hdp =>
                    hdp.VALIDATION_STATUS != HorseDocPartStatus.REFUSED.ToString() && 
                    GetHorseIdentityGenderQuery(hdp).Any(hig => hig.IS_FULL)
                )
        ).SingleOrDefault();
    return horseDoc;
}

这是最后一个代码:

public IEnumerable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(HORSE_DOCUMENT_PART horseDocPart)
{
    var possibleDocs = Tables
        .DOCUMENTs
        .Where(doc => doc.DOC_OWNER_UID == horseDocPart.HORSE_DOCUMENT_PART_UID);
    return horseDocPart
        .HORSE_DOCUMENT
        .HORSE_IDENTITY_TYPE
        .HORSE_IDENTITY_GENDER
        .Join(
            possibleDocs,
            hig => hig.DOCUMENT_GENDER_CODE.DOCUMENT_GENDER_CODE_UID,
            doc => doc.DOCUMENT_GENDER_CODE_UID,
            (dgc, doc) => dgc
        );
} 

C#NET LINQ to Entities无法识别该方法

您从方法返回IEnumerable

public IEnumerable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...)

这是推迟的,但使用IEnumerable不允许执行Linq-To Sql,您应该使用IQueryable。

public IQueryable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...)

请参阅Returning IEnumerable<T>相对于IQueryable<T>