2016-02-11 10 views
2

У меня есть две таблицы. Родительская таблица и таблица ссылок, в которой хранятся идентификаторы. Родительская таблица имеет связанные данные от себя. Вот модели:Получение всех связанных объектов через связанную таблицу. Entity Framework

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; } 
} 

Некоторые тестовые данные enter image description here И сопоставляются им нравится эта

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(); 

Она возвращает себя не связанных людей. В моем случае он должен возвращает людей с идентификаторами: 2,3,4, но возвращает три человека с идентификатором 1

я могу получить то, что мне нужно от MyDbContext.Relation, но потребность, MyDbContext.People

Что я делать не так? Есть ли другой способ сделать это?

+0

'Include' предназначен только для поиска загружаемых навигационных свойств, это не влияет на результат запроса. Ваш примерный запрос должен возвращать только один объект с идентификатором 1. Похоже, вы хотите получить список дочерних элементов определенного объекта? –

ответ

0

Иван прав. Вы должны использовать ключевое слово join, чтобы присоединиться к обеим таблицам, как показано ниже. Вы получите желаемый результат (Люди с идентификаторами: 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(); 

Надеюсь, это поможет.

Смежные вопросы