В вашем запросе нет ничего плохого, но вы можете написать его гораздо проще, без вложенных запросов:
public static List<RequestInfo> GetRequests(int employeeId)
{
using (SHPContainerEntities db = new SHPContainerEntities())
{
return (
from x in db.AnnualLeaveBookeds
where x.NextApproverId == employeeId ||
(x.ApproverId == employeeId && x.ApprovalDate == null)
orderby x.AnnualLeaveDate
select new RequestInfo
{
AnnualLeaveDate = x.AnnualLeaveDate,
Forename = x.Employee.Forename,
Surname = x.Employee.Surname,
RequestDate = x.RequestDate,
CancelRequestDate = x.CancelRequestDate,
ApproveFlag = false,
RejectFlag = false,
Reason = string.Empty
}).ToList();
}
}
Посмотрите, как я только что удалил ваш from e in db.Employees where ... select e.Forename)
и просто заменил егос x.Employee.Forename
.Когда ваша база данных содержит правильные отношения внешнего ключа, конструктор EF успешно сгенерирует модель, содержащую свойство Employee
для объекта AnnualLeaveBooked
.Подобный запрос делает его более читабельным.
Надеюсь, это поможет.