Получение нескольких записей с помощью Entity Framework при соединении таблиц "Многие-ко-Многим"

Рейтинг: -4Ответов: 1Опубликовано: 06.11.2014

Всем доброго времени суток!

У меня имеется следующая таблица "Сотрудника":

public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string Address { get; set; }
public System.DateTime Birthday { get; set; }

public virtual ICollection<History> History { get; set; }

И таблица "Должностей":

public int PostID { get; set; }
public string Post { get; set; }
public int Salary { get; set; }

public virtual ICollection<History> History { get; set; }

Так как тут используется отношение Многие-ко-Многим, имеется также связующая таблица "История" (History):

public int EmployeeID { get; set; }
public System.DateTime DateOfEmployemnt { get; set; }
public System.DateTime DateOfDismissal { get; set; }
public int PostID { get; set; }

public virtual Employees Employees { get; set; }
public virtual PostsTable PostsTable { get; set; }

Помимо связующих полей EmployeeID и PostID, в таблице History также имеется два поля "дата устройства" и "дата увольнения".

Так вот, мне нужно вывести информацию о каждом сотруднике вместе со всеми должностями, которые он когда-либо занимал. Вот что я написал:

    var x = (from tempE in DbContext.Employees
             from tempH in tempE.History
             select new
             {
                 tempE.FirstName,
                 tempE.SecondName,
                 tempE.Address,
                 tempE.Birthday,
                 DatesOfEmployemnt = tempE.History.Select(m => m.DateOfEmployemnt),
                 DatesOfDismissal = tempE.History.Select(m => m.DateOfDismissal),
                 Posts = ???
             }).ToList();

Как видите, у меня почти всё получилось, за исключением вывода названий должностей (поле Post). Никак не могу понять, как это сделать. Не могли бы вы мне помочь? Может, у меня вообще неверный подход?

Ответы

▲ 2

Вот так это обычно делается:

var x = DbContext.Employees.Include(e => e.History.Select(h => h.PostsTable)).ToList();