2015-10-02 41 views
0

我有兩個類:多對多的關係 - 讓所有的對象鏈接到另外一個

public class User 
{ 
    public User() 
    { 
     this.Groups = new List<Group>(); 
    } 

    public long Id { get; set; } 
    public string Name { get; set; } 

    public IList<Group> Groups { get; set; } 
} 

public class Group 
{ 
    public Group() 
    { 
     this.Users = new List<User>(); 
    } 

    public long Id { get; set; } 
    public string Name { get; set; } 

    public IList<User> Users { get; set; } 
} 

我以一個定義的OpenAccess的一個多一對多的關係加入表:

mapping.HasAssociation(user => user.Groups).WithOpposite(group => group.Users).MapJoinTable("UserGroup", (user, group) => new 
      { 
       UserId = user.Id, 
       GroupId = group.Id 
      }); 

我想獲得所有與組x關聯的用戶。

如何編寫linq請求?

我最終希望在刪除所有鏈接(用戶/組)後刪除組x。或者是否可以通過級聯刪除自動完成?這兩個解決方案讓我感興趣。

回答

0

您可以使用下面

var allUserInGroup = Group.Where(group => group.Id == id).Select(group => group.Users).ToList(); 

示例代碼對於刪除部分選擇GroupUsers

if(!group.Any(g => g.Users)) { // assume group is IQueryable/IEnumerable 
    context.Group.Remove(group); 
    context.SaveChanges(); 
} 
+0

的選擇給了我一個trackedList [用戶]。如何在循環中使用它?如何將其轉換爲IEnumerable(例如列表)? – profou

+0

我有一個錯誤「未知方法任何(?)」與刪除部分。 – profou

+0

@profou:我編輯了我的答案。你只需在第一部分調用'ToList()'。第二部分,該組必須是IEnumerable或IQueryable –

相關問題