linq(lambda)用于使用非实体的联接表进行多对多联接的查询

时间:2019-06-01 23:01:32

标签: c# sql entity-framework linq entity-framework-core

我正在尝试获取基于特定项目向用户注册的设备的列表。

我的架构如下:

我的Users和Projects表之间存在多对多关系,这是通过称为ProjectUsers的联接表完成的。我的设备表通过UserId字段与用户连接。

我需要根据项目ID返回设备清单,但是我很难使用Join<>,因为我的上下文中不存在ProjectUsers实体。

最终这是我需要的查询,当我在SSMS中运行它时,我得到了想要的结果:

select d.* from devices d
join users u on u.id = d.userid
join projectusers pu on pu.userid = u.id
join projects p on p.id = pu.projectid
where p.id = 7

这是我的模特,如果有帮助的话: 用户:

public class User : IInt32Identity
{
    public int Id { get; set; }
    public string UserEmail { get; set; }
    public List<ProjectUsers> ProjectUsers { get; set; }
    ...
}

项目:

public class Project : IInt32Identity
{
    public int Id { get; set; }
    public string ProjectName { get; set; }
    public List<ProjectUsers> ProjectUsers { get; set; }
    ...
}

ProjectUsers:

public class ProjectUsers
{
    public int UserId { get; set; }
    public User User { get; set; }
    public int ProjectId { get; set; }
    public Project Project { get; set; }
}

设备:

public class Device : IInt32Identity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int UserId { get; set; }
    ...
}

0 个答案:

没有答案