Member 12669478 Ответов: 2

Удалите временной интервал, если все сотрудники заняты (назначены на встречу)


У меня есть календарь, который клиенты будут использовать для выбора даты, когда дата выбрана, появляется всплывающее окно с выпадающим меню с рабочими часами, если все сотрудники заняты в определенное время, я хочу, чтобы он был удален из выпадающего меню

это то, что у меня есть до сих пор


( select   WorkingHours from WorkingHours
  except
(select  StartTime from Assign_Staff,Schedule1 
 where Assign_Staff.ScheduleId=Schedule1.ScheduleID and
  exists (select ScheduleID,StartTime from Schedule1 where Date='2016-08-16'))
  ) ( select distinct StaffID, WorkingHours from Staff,WorkingHours
  except
(select  StaffID,StartTime from Assign_Staff,Schedule1 
 where Assign_Staff.ScheduleId=Schedule1.ScheduleID and
  exists (select ScheduleID,StartTime from Schedule1 where Date='2016-08-16'))
  ) 




мои таблицы: таблица расписание содержит (ИД, дата, значение start_time,время окончания,Кодклиента) appointment_Staff (ИД, ScheduleID, staffID,AdminID) working_Hours (идентификатор,значение start_time,время окончания)

Что я уже пробовал:

Я не могу этого понять

Maciej Los

Что ж... в зависимости от типа объектов, используемых для хранения данных, решение может отличаться. Это: Linq to SQL, Linq To Dataset, другое ?

Member 12669478

LINQ к SQL

2 Ответов

Рейтинг:
1

Maciej Los

Несколько заметок:


  1. Неправильный подход! Этот набор подзапросов может вызвать проблемы с эффективностью...
    (select  StartTime from Assign_Staff,Schedule1 
     where Assign_Staff.ScheduleId=Schedule1.ScheduleID and
      exists (select ScheduleID,StartTime from Schedule1 where Date='2016-08-16'))

    Это должно быть преобразовано в один запрос, который использует join и where пункт:
    SELECT StartTime
    FROM Assign_Staff As sta INNER JOIN Schedule1 AS sche ON sta.ScheduleId=sche.ScheduleID 
    WHERE sche.Date='2016-08-16'

    var result = from sta in Assign_Staff
            join sche in Schedule1.Where(s=>s.Date==new DateTime(2016,8,16)) on sta.ScheduleID equals sche.ScheduleID
            select sche.StartTime

  2. Используйте ту же логику для улучшения второго запроса!
    var second = (from asta in Assign_Staff
    from whr in WorkingHours
    select new {asta.StaffID, whr.WorkingHours}).Except(
        from sta in Assign_Staff
        join sche in Schedule1.Where(s=>s.Date==new DateTime(2016,8,16)) on sta.ScheduleID equals sche.ScheduleID
            select new {sta.StaffID, sche.StartTime})

  3. Не ждите, что кто-то сделает эту работу за вас!
    Я бы предложил начать с основ:
    LINQ to SQL[^]
    LINQ to SQL: язык .NET-интегрированный запрос для реляционных данных[^]
    101 образцы LINQ в C#[^]
    Когда вы закончите читать и попытаетесь написать правильные запросы и застрянете, вернитесь сюда и опубликуйте еще один вопрос. Но вы должны быть предупреждены: вы должны объяснить, что вы сделали и почему ваш запрос не работает.
  4. Есть один инструмент, который может помочь вам преобразовать sql-запрос в linq. Это называется Linqer[^Вы можете скачать и использовать пробную версию, но вы должны иметь в виду мою первую заметку.


Рейтинг:
0

Maciej Los

Неправильный ответ! OP хочет преобразовать запрос T-SQL в запрос Linq.
Воспользуйся Улучшить решение виджет для улучшения ответа или удаления его, чтобы избежать понижающего голосования.