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
);
}
您从方法返回IEnumerable
public IEnumerable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...)
这是推迟的,但使用IEnumerable不允许执行Linq-To Sql,您应该使用IQueryable。
public IQueryable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...)
请参阅Returning IEnumerable<T>相对于IQueryable<T>