Как написать предложение where для этой проблемы?Сложный linq с запросом Entity Framework
Я хочу получить список предприятий, в которых соответствующие сотрудники имеют время, чтобы сделать конкретную услугу в этот день.
Примеры: Кто-то ищет предприятия, предлагающие сервис x в четверг в 15:00. Он должен проверить доступность каждого сотрудника, бронирование и время, необходимое для выполнения услуги (ServiceEmployee.minutes), которая является длительностью бронирования.
Это то, что я до сих пор:
public List<SearchModel.Result> GetServices(SearchModel.Request model)
{
var geo = DataUtility.GetGeo(model.lat, model.lng);
var results = (from b in _db.Businesses
join ad in _db.Addresses on b.addressId equals ad.addressId
join e in _db.Employees on b.businessId equals e.businessId
join av in _db.Availabilities on e.employeeId equals av.employeeId
join se in _db.ServiceEmployees on e.employeeId equals se.employeeId
join s in _db.Services on se.serviceId equals s.serviceId
where s.serviceId.Equals(model.serviceId) //service required
&& av.day.Equals(model.date.DayOfWeek) //day of the week required
//how to write the below where clause??
//and has at least one slot of time available (no bookings) that will fit the service time length (minutes)
//and is not over the employee's shift (Availability.endAt)
//
&& ad.geo.Distance(geo) <= 15000 //15km
select new SearchModel.Result
{
businessId = b.businessId,
businessName = b.name,
serviceName = s.name,
price = se.price, //potentially incorrect
time = av.startAt //potentially incorrect
}).ToList();
return results;
}
Пожалуйста, покажите/используйте свойства навигации вместо объединений –
Итак, что вы пробовали? – DotNetHitMan