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()};
我有一点复杂(无论如何对我来说):
我在多对多关系中有 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()};