如何在第一个代码实体框架5中通过linq选择多对多关系中的数据
我使用第一个代码实体框架5创建了一个数据库。在我的模型中,我的实体之间有一些多对多的关系。我不知道如何在这些模型中获取数据 我有这些课程如何在第一个代码实体框架5中通过linq选择多对多关系中的数据,linq,entity-framework,many-to-many,Linq,Entity Framework,Many To Many,我使用第一个代码实体框架5创建了一个数据库。在我的模型中,我的实体之间有一些多对多的关系。我不知道如何在这些模型中获取数据 我有这些课程 public abstract class BaseEntity { public int Id { get; set; } } public class UserGroupEntity : BaseEntity { public UserGroupEntity() { this.Users = new List<
public abstract class BaseEntity
{
public int Id { get; set; }
}
public class UserGroupEntity : BaseEntity
{
public UserGroupEntity()
{
this.Users = new List<UserEntity>();
this.Exams = new List<ExamEntity>();
}
public string Name { get; set; }
public byte State { get; set; }
public virtual IList<UserEntity> Users { get; set; }
public virtual IList<ExamEntity> Exams { get; set; }
}
public class UserEntity : BaseEntity
{
public UserEntity()
{
UserGroups = new List<UserGroupEntity>();
}
public string UserName { get; set; }
public byte State { get; set; }
public virtual IList<UserGroupEntity> UserGroups { get; set; }
}
public class ExamGroupEntity : BaseEntity
{
public ExamGroupEntity()
{
this.Exams = new List<ExamEntity>();
}
public string Name { get; set; }
public byte State { get; set; }
public virtual IList<ExamEntity> Exams { get; set; }
}
public class ExamEntity : BaseEntity
{
public ExamEntity()
{
this.UserGroups = new List<UserGroupEntity>();
this.ExamDetail = new List<ExamDetailEntity>();
}
public string Name { get; set; }
public byte State { get; set; }
public virtual ExamGroupEntity ExamGroup { get; set; }
public virtual IList<UserGroupEntity> UserGroups { get; set; }
}
在Linq中联接要求在查询的联接部分使用equals关键字而不是=符号,但随后要切换回C操作数,例如where子句中的== 遵循语法 从ListOfX中的x在x上的ListOfY中加入y。Id等于y。Id选择
var joined =
(
from e in Exams join EJU in ExamsJoinUserGroups
on e.Id equals EJU.ExamId
join UJU in UsersJoinUserGroups
on EJU.UserGroupId equals UJU.UserGroupId
where UJU.UserId == 2
&& e.ExamGroup_Id == 1
&& e.State == 1
select e
);
对于您的模型,LINQ查询可能如下所示:
var exams = context.ExamEntities
.Where(e => e.UserGroups.Any(ug => ug.Users.Any(u => u.Id == 2)) &&
e.ExamGroup.Id == 1 &&
e.State == 1)
.ToList();
在我的模型中,我没有任何与UsersJoinUserGroups相等的实体。您的意思是我必须创建一个像UsersJoinUserGroups这样的实体,并在第一个代码模型中创建关系表吗?啊,很抱歉——不过,在我看来,这是最接近底层数据逻辑的方法。拥有第三个联接表将是多对多关系的标准SQL实践
var joined =
(
from e in Exams join EJU in ExamsJoinUserGroups
on e.Id equals EJU.ExamId
join UJU in UsersJoinUserGroups
on EJU.UserGroupId equals UJU.UserGroupId
where UJU.UserId == 2
&& e.ExamGroup_Id == 1
&& e.State == 1
select e
);
var exams = context.ExamEntities
.Where(e => e.UserGroups.Any(ug => ug.Users.Any(u => u.Id == 2)) &&
e.ExamGroup.Id == 1 &&
e.State == 1)
.ToList();