2011-06-30 79 views
10

,我發現了以下錯誤的支持。我不明白的是爲什麼我的代碼創建錯誤。我的比較是針對原始類型。所有的比較是Guid到Guid。該錯誤特別指出Guids是可以的。只有原始類型(「如的Int32,字符串和GUID」)在這種情況下

該錯誤發生在這條線(朝向底部):

var vla = (from cir in phoenixEntities.ComponentInRoles 

代碼:

List<ComponentRole> roles; 
using (IMSMembershipEntities entities = new IMSMembershipEntities()) 
{ 
    roles = (from role1 in entities.Roles 
      select new ComponentRole{Name = role1.RoleName, RoleId = role1.RoleId}).ToList(); 
} 

List<Components> componentInRoles; 

using (PhoenixEntities phoenixEntities = new PhoenixEntities()) 
{ 
    phoenixEntities.ContextOptions.LazyLoadingEnabled = false; 
    componentInRoles = (from component in phoenixEntities.Components 
         select new Components{Name = component.Name, 
               ComponentId = component.ComponentId, 
               //InRoles = (from componentInRole in phoenixEntities.ComponentInRoles 
               //   join role in roles on componentInRole.RoleId equals role.RoleId 
               //   where componentInRole.ComponentId == component.ComponentId 
               //   select new ComponentRole{RoleId = role.RoleId, Name = role.Name}) 
               } 
         ).ToList(); 


    foreach (Components cmpent in componentInRoles) 
    { 
     Components cmpent1 = cmpent; 
     //cmpent.InRoles = 

     var vla = (from cir in phoenixEntities.ComponentInRoles 
        join role in roles on cir.RoleId equals role.RoleId 
        where cir.ComponentId == cmpent1.ComponentId 
         select role).ToList(); 
    } 
} 
+0

是否有對Foels和phoenixEntities之間的關係? – Jethro

回答

18

的EntityFramework和LINQ to SQL的都試圖平移這樣的查詢,其一部分是在內存和其他部分在數據庫中,以sql IN運算符。

因爲你的類是IEnumerable的哪個角色不是原始類型,所以它不能被轉換爲SQL查詢。

你應該首先從數據庫抓取內存,然後在內存中加入兩個列表。

例如:

var vla = (from cir in phoenixEntities.ComponentInRoles.ToList() 
        join role in roles on cir.RoleId equals role.RoleId 
        where cir.ComponentId == cmpent1.ComponentId 
         select role).ToList(); 

我希望我幫助

+0

啊,我明白了,基本上我在混合LINQ到對象和LINQ到實體。 –

+0

修復它。謝謝! –

相關問題