2013-05-10 33 views
2

美好的一天。實體或複雜類型不能在Linq to Entity查詢中構造

林有實體或複雜類型不能遇到 這是我第一次遇到這種類型的錯誤 有人能幫我

public IEnumerable<APPLICANT> GetApplicant() 
    { 
     IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>; 

     IEnumerable<Profile> profiledata = Cache.Get("profiles") as IEnumerable<Profile>; 




     if (applicantdata == null) 
     { 

      var applicantList = (from a in context.Profiles 
           join app in context.APPLICANTs 
           on a.PROFILE_ID equals app.Profile_id 
           where app.APPLICANT_LogicalDelete == false 
           select new APPLICANT() 
           { 
       APPLICANT_LastName = a.Applicant_LASTNAME, 
       APPLICANT_FirstName = a.Applicant_FIRSTNAME, 
       APPLICANT_MiddleName = a.Applicant_MIDDLENAME, 
       APPLICANT_Address = a.Applicant_ADDRESS, 
       APPLICANT_City = a.Applicant_CITY, 
       APPLICANT_Phone = a.Applicant_PHONE, 
       APPLICANT_Email= a.Applicant_EMAIL 
      }); 

      applicantdata = applicantList.Where(v => !String.IsNullOrEmpty(v.APPLICANT_LastName)).OrderBy(v => v.APPLICANT_ID).ToList(); 

      if (applicantdata.Any())  
      { 
       Cache.Set("applicants", applicantdata, 30); 
      } 
     } 
     return applicantdata.ToList().Take(1000); 

    } 

,這是我遇到的錯誤 感謝就行了!

applicantdata = applicantList.Where(v => !String.IsNullOrEmpty(v.APPLICANT_LastName)).OrderBy(v => v.APPLICANT_ID).ToList(); 

並在LINE上述錯誤IS

System.NotSupportedException:實體或複雜類型「Model.APPLICANT」不能在LINQ被構造成實體查詢。

+0

什麼是錯誤? – leppie 2013-05-10 05:25:22

+0

我編輯了這個問題。 錯誤是 System.NotSupportedException:實體或複雜類型'Model.APPLICANT'不能在LINQ to Entities查詢中構造。 – 2013-05-10 05:29:11

+0

您不能在LINQ to Entities中使用String.IsNullorEmpty(或任何其他「本地」函數)。它不知道如何將其轉換爲數據庫函數。這是一個徹底的痛苦。 – 2013-05-10 05:33:49

回答

1
select new APPLICANT() 

實體框架不支持這一點。它在使用查詢時得到診斷,而不是在查詢被構建時被診斷出來,這就是爲什麼你得到異常的行很混亂。

您可以構建任何類型的不是也是一個數據庫實體,包括匿名類型,所以你可以做

select new 
{ 
    a.Applicant_LASTNAME, 
    a.Applicant_FIRSTNAME, 
    a.Applicant_MIDDLENAME, 
    a.Applicant_ADDRESS, 
    a.Applicant_CITY, 
    a.Applicant_PHONE, 
    a.Applicant_EMAIL 
} 

,你可以,如果需要的話,把這些值回APPLICANT對象後您的查詢已完成執行。

或者,如果合適的話,您可以直接APPLICANT

select app 

我不知道爲什麼你在這兩個ProfileAPPLICANTApplicant_LASTNAME等等,我不知道,如果值是相同的。如果他們不是,這最後的建議不會對你有用。

+0

經過數小時和數小時的搜索,終於找到了我的問題!非常感謝你的解釋! – OverMars 2014-01-27 16:48:35

0

如果我沒有錯,你需要轉換爲Queryable對象。

applicantdata = applicantList.AsQueryable().Where(v => !String.IsNullOrEmpty(v.APPLICANT_LastName)).OrderBy(v => v.APPLICANT_ID).ToList(); 
相關問題