我有点复杂(对我而言):
我有多个关系的2个实体。
Projects {Project_Id, ProjectName}
Users {User_Id, UserName}
Projects-Users {Id, Project_Id, User_id}
可以将项目分配给更多用户。
现在我想用Project_id,Name,ListOfAssignedUsers检索所有项目的列表(列出一次):
Id ProjectName Users
1 Project1 U1, U2, U3
2 Project2
3 Project3 U1
我可以在SQL中执行此操作,但无法弄清楚如何在LINQ中执行此操作!
它的LINQ to Entity - Framework(DB first):
我的课程看起来像这样:
公共部分类项目 { 公共项目() { this.Users = new HashSet(); }
public int Project_Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Users> Users { get; set; }
}
公共部分类用户 { 公共用户() { this.Projects = new 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)作为主键。
答案 0 :(得分:0)
从Project-Users表中删除Id字段。如果需要主键,则应为{Project_Id,User_id}。 Projects.Project_Id和Project-Users.Project_Id之间应该有(如果还没有)外键约束,User.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)));
}
答案 1 :(得分:0)
获取具有指定用户的所有项目的列表:
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()};