通过related table获取所有相关对象。 Entity Framework
Getting all related objects via related table. Entity Framework
我有两个 table。存储 ID 的父级 table 和 link table。 Parent table 有自己的相关数据。这是模型:
public class People
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Relation> Relations { get; set; }
}
public class Relation
{
public int Id { get; set; }
public int ParentPeopleID { get; set; }
public int ChildPeopleID { get; set; }
public People People { get; set; }
}
部分测试数据
并像这样映射它们
HasRequired(p => p.People).WithMany(p => p.Relations).HasForeignKey(p => p.ParentPeopleID);
当我打电话时
var Peoplelist = MyDbContext.People.Include(p=>p.Relations.Select(r=>r.People)).Where(p=>p.Id==1).ToList();
它returns本身与人无关。在我的例子中,它应该 returns id 为 2,3,4 的人,但是 returns 三个 id 为 1 的人
我可以通过 MyDbContext.Relation 获得我需要的东西,但需要通过 MyDbContext.People
我做错了什么?
还有其他方法吗?
伊万说得对。您应该使用 join 关键字来连接两个表,如下所示。通过使用此查询,您将获得所需的结果(ID 为 2、3、4 的人):
var Peoplelist = MyDbContext.Peoples.Join(MyDbContext.Relations, p => p.Id, r => r.ChildPeopleID,
(p, r) => new {p, r})
.Where(j => j.r.ParentPeopleID == 1).ToList();
希望这会有所帮助。
我有两个 table。存储 ID 的父级 table 和 link table。 Parent table 有自己的相关数据。这是模型:
public class People
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Relation> Relations { get; set; }
}
public class Relation
{
public int Id { get; set; }
public int ParentPeopleID { get; set; }
public int ChildPeopleID { get; set; }
public People People { get; set; }
}
部分测试数据
HasRequired(p => p.People).WithMany(p => p.Relations).HasForeignKey(p => p.ParentPeopleID);
当我打电话时
var Peoplelist = MyDbContext.People.Include(p=>p.Relations.Select(r=>r.People)).Where(p=>p.Id==1).ToList();
它returns本身与人无关。在我的例子中,它应该 returns id 为 2,3,4 的人,但是 returns 三个 id 为 1 的人
我可以通过 MyDbContext.Relation 获得我需要的东西,但需要通过 MyDbContext.People
我做错了什么? 还有其他方法吗?
伊万说得对。您应该使用 join 关键字来连接两个表,如下所示。通过使用此查询,您将获得所需的结果(ID 为 2、3、4 的人):
var Peoplelist = MyDbContext.Peoples.Join(MyDbContext.Relations, p => p.Id, r => r.ChildPeopleID,
(p, r) => new {p, r})
.Where(j => j.r.ParentPeopleID == 1).ToList();
希望这会有所帮助。