0

我有兩個看起來完全一樣的函數,除了它們創建兩個不同對象的列表。這兩個不同的對象看起來非常相似,但是當我嘗試運行其中一個對象的某個函數時,出現錯誤消息:「實體或複雜類型無法在LINQ to Entities查詢中構造」。有人能以非常簡單的方式向我解釋發生了什麼嗎?另外,你能告訴我如何改變我的代碼,使其工作?謝謝,艾倫。實體或複雜類型不能在LINQ to Entities查詢中構建

功能1(作品):

public static List<ChartApp> ListChartApplications() 
    { 
     using (var db = new LatencyDBContext()) 
     { 
      var appNames = db.LoginApplications.Select(item => new ChartApp() 
      { 
       LoginApplicationID = item.LoginApplicationID, 
       LoginAppName = item.LoginAppName, 
      }).OrderBy(item => item.LoginAppName); 
      return appNames.ToList(); 
     } 
    } 

功能2(拋出的 「返回appNames.ToList();」 的錯誤):

public static List<LoginApplication> ListApplications() 
    { 
     using (var db = new LatencyDBContext()) 
     { 
      var appNames = db.LoginApplications.Select(item => new LoginApplication() 
      { 
       LoginApplicationID = item.LoginApplicationID, 
       LoginAppName = item.LoginAppName, 
      }).OrderBy(item => item.LoginAppName); 
      return appNames.ToList(); 
     } 
    } 

類:

public class ChartApp 
{ 
    public ChartApp() 
    { 
     this.LoginHistories = new List<ChartHist>(); 
    } 

    public int? LoginApplicationID { get; set; } 
    public string LoginAppName { get; set; } 
    public virtual ICollection<ChartHist> LoginHistories { get; set; } 
    public int Step { get; set; } 
} 

public class LoginApplication 
{ 
    public LoginApplication() 
    { 
     this.LoginHistories = new List<LoginHistory>(); 
    } 

    public int LoginApplicationID { get; set; } 
    public string LoginAppName { get; set; } 
    public virtual ICollection<LoginHistory> LoginHistories { get; set; } 
} 

編輯:可能的差異可能是其中一個對象映射到數據庫?

public class LoginApplicationMap : EntityTypeConfiguration<LoginApplication> 
{ 
    public LoginApplicationMap() 
    { 
     // Primary Key 
     this.HasKey(t => t.LoginApplicationID); 

     // Properties 
     this.Property(t => t.LoginAppName) 
      .HasMaxLength(500); 

     // Table & Column Mappings 
     this.ToTable("LoginApplication"); 
     this.Property(t => t.LoginApplicationID).HasColumnName("LoginApplicationID"); 
     this.Property(t => t.LoginAppName).HasColumnName("LoginAppName"); 
    } 
} 
+0

其中一個類是映射實體,而另一個不是?看看這個問題:http://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query/5325861#5325861 – Yakimych 2013-02-15 20:08:14

+0

是的,一個映射另一個則不是。我會看看你的鏈接。 – ADH 2013-02-15 20:45:08

+0

好的,這解釋了錯誤。那麼,修復錯誤的最佳方法是什麼?我怎樣才能改變我的功能,不再拋出錯誤呢? – ADH 2013-02-15 20:50:44

回答

1

我在這種情況下,解決辦法是直接刪除非工作功能和使用在所有地方的工作之一。對於被映射的類似函數,我使用下面的函數來返回值。

public static List<LoginEnvironment> ListEnvironments(bool allSelection) 
    { 
     using (var db = new LatencyDBContext()) 
     { 
      //GET ALL THE ENVIRONMENT NAMES    
      var envNames = from e in db.LoginEnvironments 
          orderby e.LoginEnvName 
          select e; 

      //PUT ALL THE ENVIRONMENTS INTO A LOCAL LIST 
      var listEnv = new List<LoginEnvironment>(); 

      if (allSelection) 
      { 
       var defaultAll = new LoginEnvironment(); 
       defaultAll.LoginEnvironmentID = 0; 
       defaultAll.LoginEnvName = "All"; 
       listEnv.Add(defaultAll); 
      } 

      foreach (var item in envNames) 
      { 
       var localEnv = new LoginEnvironment(); 
       localEnv.LoginEnvironmentID = item.LoginEnvironmentID; 
       localEnv.LoginEnvName = item.LoginEnvName; 
       listEnv.Add(localEnv); 
      } 

      return listEnv; 
     } 
    } 
相關問題