LINQ 多对多关系 - 获取分组对象的列表

LINQ many to many relationship - get a list of grouped objects

我有一点复杂(无论如何对我来说):

我在多对多关系中有 2 个实体。

Projects       {Project_Id, ProjectName}
Users          {User_Id, UserName} 
Projects-Users {Id, Project_Id, User_id}   

一个项目可以分配给更多用户。

现在我想检索所有项目的列表(列出一次)Project_id,名称,ListOfAssignedUsers:

Id  ProjectName  Users
1   Project1     U1, U2, U3
2   Project2     
3   Project3     U1

我可以在 SQL 中执行此操作,但不知道如何在 LINQ 中执行此操作!

它是 LINQ to Entity - Framework(数据库优先):
我的 classes 看起来像这样:

public 部分 class 个项目 { public 项目() { this.Users = 新的 HashSet(); }

    public int Project_Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Users> Users { get; set; }
}

public 部分 class 用户 { public 用户() { this.Projects = 新的 HashSet(); }

    public int User_Id { get; set; }
    public string UserName { get; set; }

    public virtual ICollection<Projects> Projects { get; set; }
}

(我通过从 Projects-Users 中删除 id 进行了更改,并将组合(Project_Id、User_id)作为主键。

从项目用户中删除 Id 字段 table。如果需要,主键应该是 {Project_Id,User_id}。 Projects.Project_Id 和 Project-Users.Project_Id 之间应该有(如果还没有的话)外键约束,Users.User_Id 和 Project-Users.User_id

之间应该有另一个 FK

如果您在 Entity Framework 中映射了您的模型,那么您可以这样引用它:

var result=context.Project.Include(p=>p.Users);

您可以像这样转储结果:

foreach(var record in result)
{
  Console.WriteLine("{0} {1} {2}",
    record.Project_Id,
    record.ProjectName,
    String.Join(",",record.Users.Select(u=>u.UserName)));
}

正在获取具有指定用户的所有项目的列表:

var projects= from p in db.Projects select new{ project_Id = p.Project_Id, projectName = p.ProjectName, userList = p.Projects-Users.Select(pu=>pu.Users.UserName).ToList()};