Когда-нибудь задумывались о написании следующего запроса в Entity Framework?
SQL
xxxxxxxxxx
1
Select * From Employees e
2
left join Employees_Attendance ea on e.id=ea.employee_id and ea.date between {{startdate}} and {{enddate}}
В приведенном выше запросе {{startdate}} и {{enddate}} являются параметрами. В этом запросе будут перечислены все сотрудники, но только посещаемость между начальной и конечной датой.
Работая над проектом, кажется, что это очень трудно сделать, используя стандартную библиотеку EF Core, поэтому я нашел доступное онлайн-решение, которое, по моему мнению, стоит поделиться.
Библиотека имеет много полезных функций, в том числе ту, которую мы пытаемся решить, которую можно скачать по адресу https://entityframework-plus.net/download .
При использовании метода расширения этой библиотеки IncludeFilter приведенный выше запрос можно записать в EF Core следующим образом:
C #
xxxxxxxxxx
1
_dbContext.Employees
2
.IncludeFilter(x => x.EmployeeAttendance.Where(y => y.Date >= {{StartDate}} && y.Date <= {{EndDate}}))
StartDate и EndDate — это параметры, которые можно заменить на параметры в ваших решениях.
Спасибо за чтение. Удачного кодирования!
Дальнейшее чтение
Опровергнуты советы по работе с плохими запросами
Попробуйте использовать [NOT] EXISTS вместо [NOT] IN
Совет: отслеживание вызовов с помощью тегов запросов в Entity Framework Core 2.2