Если нет другого варианта, вам придется использовать проекцию, которая включает эти поля, это может быть что-то вроде:
GetAllEmployees()
.Select( e => new {
Person = e,
Contact = Contacts.Where( c=> c.Id == e.ContactID).Single()
})
.OrderBy( x => x.Contact.LastName)
.Select( x => x.Person) //back to Employee
.Skip(...)
.Take(...)
Это не очень эффективно, так как вам придется запроситьContacts
сущность, установленная для каждого сотрудника (так n запросов!) - поэтому я бы предложил изменить исходный запрос Linq to Entities, чтобы он возвращал вам список Сотрудников с их связанными контактами, что можно сделать с помощью объединения, т. Е. GetEmployeesWithContact()
Лучшим решением в стиле Linq to Entities было бы включать Контакты при загрузке сотрудников:
var emps = Employees.Include("Contact");
теперь каждый сотрудник в emps
будет иметьContact
Свойство, которое вы можете использовать в своей проекции:
IQueryable<Employee> employees = emps.OrderBy(x=> x.Contact.LastName)
.Skip(pageIndex * pageSize).
.Take(pageSize).ToArray();