2015-11-12 27 views
0

我越來越想做一個LINQ查詢時,此錯誤的方法:C#NET LINQ到實體不承認

LINQ到實體無法識別方法「System.Collections.Generic.IEnumerable` 1 [FEI.Entities.EF6.Tables.HORSE_IDENTITY_GENDER] GetHorseIdentityGenderQuery(FEI.Entities.EF6.Tables.HORSE_DOCUMENT_PART)'方法,並且此方法不能被翻譯爲商店表達式。

我讀了很多以前的問題,人們得到了同樣的錯誤,但我明白,這是因爲LINQ到實體,需要全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 
     ); 
} 
+0

IsCharityMatching在EF代碼示例沒有提及更爲詳細的解釋? –

+0

對不起,這是一個錯誤。 它現在被修正了 –

回答

0

返回IEnumerable來自方法

public IEnumerable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...) 

這是推遲的,但使用IEnumerable不允許執行Linq-to-Sql,因此應該使用IQueryable。

public IQueryable<HORSE_IDENTITY_GENDER> GetHorseIdentityGenderQuery(...) 

請參閱從Returning IEnumerable<T> vs. IQueryable<T>

+0

它沒有工作。我得到了相同的錯誤,但這次用「IQueryable」而不是「IEnumerable」 –