2014-02-27 100 views
0

我有以下三個實體類:LINQ到實體JOIN意想不到的結果

public class ApplicationUser : IdentityUser 
    { 
     public override string Id { get; set; } 
     [DefaultValue(false)] 
     [DisplayName("Is Active?")] 
     public bool IsActive { get; set; } 
    } 



public class Reseller : Organisation 
    { 

     //public List<EmailAddress> EmailAdresses { get; set; } 
     [Required] 
     [DataType(DataType.EmailAddress)] 
     public override string EmailAddress { get; set; } 

     public List<Client> Clients { get; set; } 

     public List<ResellerUserConnector> Users { get; set; } 

    } 

public class ResellerUserConnector 
    { 
     public ResellerUserConnector() { } 

     public ResellerUserConnector(string userId) 
     { 
      this.UserId = userId; 
     } 

     public Int64 Id { get; set; } 

     public string UserId { get; set; } 

     public Int64 ResellerId { get; set; } 

     public Reseller Reseller { get; set; } 
    } 

從邏輯上講,Reseller可以有零個或多個ApplicationUsers。但是,由於某些限制,我們不允許將Reseller作爲ICollection<ApplicationUser>財產。 EF也無法處理存儲ICollection<string> property。因此我創建了「聯想」實體ResellerUserConnector

但是,我在檢索給定的Reseller的ApplicationUser實例列表方面沒有成功(儘管直接瀏覽數據庫顯示值和鍵已正確存儲在數據庫中)。

這是LINQ to Entity代碼,它無法檢索給定ResellerList<ApplicationUser>實例。

List<ApplicationUser> users = (from u in identityDb.Users 
         join ru in r.Users on u.Id equals ru.UserId 
         select u).ToList<ApplicationUser>(); 

我是一個LINQ小白所以請幫助一個小夥子出來......

回答

0
var ids = r.Users.Select(c => c.UserId).ToList();  
List<ApplicationUser> users = 
         (from u in identityDb.Users 
         where ids.Contains(u.Id) 
         select u).ToList<ApplicationUser>(); 
+0

謝謝,這個工作。只要我被允許,將其標記爲答案;) –