Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:linq:exaples [15.09.2025 09:33] ekaterina.menkhuzinaproduct:linq:exaples [15.09.2025 13:14] (текущий) ekaterina.menkhuzina
Строка 775: Строка 775:
 ===== Поиск задач в проекте с максимальным отклонением ===== ===== Поиск задач в проекте с максимальным отклонением =====
 <code csharp> <code csharp>
 +var сегодня = DateTime.Now;
  
 +var zadacha = dataContext.Zadacha_2b33fa_List
 +      .Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork)
 +      .Where(p => p.GetParentHierarchy<Project>(false).Where(p => p is IT__proekt_ff08df ||  p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5).FirstOrDefault().Name != null)
 +      .Select(p => new { 
 +          Проект_ID =   (Guid?)p.GetParentHierarchy<Project>(false).Where(p => p is IT__proekt_ff08df ||  p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5).FirstOrDefault().Id, 
 +          Проект_name = p.GetParentHierarchy<Project>(false).Where(p => p is IT__proekt_ff08df ||  p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5).FirstOrDefault().Name, 
 +          Задача_КП = p.Name,
 +          Задача_КП_ID = p.Id,
 +          УДО = p.BaselinePlanEndDate,
 +          ПДО = p.SystemEndDate,
 +          ФДО = p.ActualEndDate,
 +          p.CalendarId,    })
 +  .ToList();
 + var allzadacha = zadacha
 +  .Select(r => new {
 +             r.Проект_ID, 
 +             r.Проект_name, 
 +             r.Задача_КП,
 +             r.Задача_КП_ID,
 +              r.УДО,
 +              r.ПДО,
 +              r.ФДО,
 +              r.CalendarId,
 +              Отклонение_Задач =  r.УДО != null ?  Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО.Value.Date, r.ПДО.Value.Date)) : 0,   }).ToList();
 +//return allzadacha;
 +
 +var id = parameters.GetValueOrDefault<Guid?>(QueryParameters.SpreadsheetReport.ProjectId, null); 
 +var idproject = id;
 +var Katalog = parameters.GetValueOrDefault<string>("Katalog", "1d1ac40d-156b-4726-b2be-877aae71deaa");
 +var projects = dataContext.Projects
 +      .Where(p => p is IT__proekt_ff08df ||  p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5)
 +      .Where(d => (Guid?)d.GetParentHierarchy<Katalog_743df4>(true).FirstOrDefault().Id == new Guid(Katalog))
 +      .Select(p => new { 
 +          p.Id, 
 +          p.Name, 
 +           
 +          УДН = p.BaselinePlanStartDate,
 +          УДО = p.BaselinePlanEndDate,
 +          ПДН = p.SystemStartDate,
 +          ПДО = p.SystemEndDate,
 +          ФДН = p.ActualStartDate,
 +          ФДО = p.ActualEndDate,
 +          p.CalendarId,
 +  //        Длительность = DbFunctions.DiffDays(p.SystemStartDate, p.SystemEndDate),
 +        ПДО_Задача_на_КП = p.GetChildrenHierarchy<Zadacha_2b33fa>(true).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().SystemEndDate,  
 +        УДО_Задача_на_КП = p.GetChildrenHierarchy<Zadacha_2b33fa>(true).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().BaselinePlanEndDate,         
 +
 +        Задача_КП = p.GetChildrenHierarchy<Zadacha_2b33fa>(false).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().Name,
 +        Задача_КП_ID = (Guid?)p.GetChildrenHierarchy<Zadacha_2b33fa>(false).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().Id,
 +        Процент_вып_проекта = p.PercentComplete,
 +            })
 +
 +  .ToList()
 +  .Select(r => new{
 +            
 +              r.Id, 
 +              r.Name, 
 +            
 +          r.УДН,
 +          r.УДО,
 +          r.ПДН,
 +          r.ПДО,
 +          r.ФДН,
 +          r.ФДО,
 +          r.CalendarId,
 +   //       r.Длительность,
 +         
 +    r.Задача_КП_ID,       
 +    r.Задача_КП,
 +    r.ПДО_Задача_на_КП,  
 +    r.УДО_Задача_на_КП,
 +    Отклонение_Задача_на_КП = r.Задача_КП_ID != null && r.УДО_Задача_на_КП != null ?  Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО_Задача_на_КП.Value.Date, r.ПДО_Задача_на_КП.Value.Date)) : 0,
 +    r.Процент_вып_проекта,
 +
 +    Отклонение_Список_Задач = allzadacha.Where(d => d.Проект_ID == r.Id ).Select (h => h.Задача_КП) , 
 +    Отклонение_Задача_на_КП2 = allzadacha.Where(d => d.Проект_ID == r.Id ).Any() ? allzadacha.Where(d => d.Проект_ID == r.Id).OrderByDescending(k => k.Отклонение_Задач).FirstOrDefault().Отклонение_Задач : 0,   
 +    Отклонение_Задача_на_КП_max = allzadacha.Where(d => d.Проект_ID == r.Id ).Any() ? allzadacha.Where(d => d.Проект_ID == r.Id ).Max(g => g.Отклонение_Задач) : 0, 
 + })
 +.ToList();
 +return projects;
 +
 +</code>
 +
 +===== Последняя по времени запись в протоколе =====
 +<code csharp>
 +// Пример linq-запроса на событие последнего изменения объекта:
 +var projectId = parameters.GetValueOrDefault<Guid?>("ProjectId", new Guid("a6ed1995-582c-42d3-afa0-6db8c280b212")); // UID объекта
 +var lastEvent = dataContext.Events // получаем события  
 +    .Where(p => p.ObjectId == projectId) // фильтруем по id объекта  
 +    .OrderByDescending(p => p.Time) // сортировка по полю Time  
 +    .Select(p => new  
 +    {  
 +        Время = p.Time,  
 +        UID_пользователя = p.PersonId,  
 +        Текст = p.MessageHtml,  
 +        ИД_проекта = p.ObjectId,  
 +        Данные_события = p.MessageData,  
 +        Тип_события = p.Type,  
 +    })  
 +    .Take(1) // берем только одну запись  
 +    .ToList(); // преобразуем в список  
 +
 +return lastEvent; // Возвращаем список, содержащий последнюю запись или пустой список
 </code> </code>