====== Примеры LINQ-запросов ====== ===== Сумма по справочникам выбранных объектов ===== var deals = dataContext.Kontragent_9e5de8_List .Where(z => z.Name.Contains("Фрагмент")) .Select(z => new {z.Name, Trudochasy = z.GetChildrenHierarchy().Sum(r => r.Chasi), Dengi = z.GetChildrenHierarchy().Sum(r => r.Summa)}) .OrderBy(z=> z.Name); return deals; ===== Просроченные задачи пользователей ===== var dToday = DateTime.Today; var tasks = dataContext.Zadacha_c88ec2_List .Where(z => z.SystemEndDate < dToday && (z.Status == ProjectStatus.InWork || z.Status == ProjectStatus.NotStarted) ) .OrderBy(z => z.Responsible.FirstName).ThenBy(z => z.Responsible.LastName).ThenBy(z => z.Name) .Select(z => new { z.Name, user_id = z.Responsible.Id, Ispolnitel = String.Concat(z.Responsible.FirstName, " ", z.Responsible.LastName), z.Responsible.Email, z.SystemStartDate, z.SystemEndDate } ); return tasks; ===== Задачи за 3 дня до начала (Задать дату начала) ===== var dStart = new DateTime(2019, 5, 1); var dEnd = dStart.AddDays(4); var deals = dataContext.SMART__zadacha_45a3a0_List .Where(z => z.PlannedStartDate >= dStart && z.PlannedStartDate < dEnd ) .OrderBy(z => z.Name) .Select(z => new { z.Name, boss = String.Concat(z.Owner.LastName, " ", z.Owner.FirstName), responsible = String.Concat(z.Responsible.LastName, " ", z.Responsible.FirstName), Creator = String.Concat(z.Creator.LastName, " ", z.Creator.FirstName), Status = (z.Status == ProjectStatus.InWork ? "В работе" : (z.Status == ProjectStatus.Complete ? "Выполнен" : (z.Status == ProjectStatus.Cancelled ? "Отменен" : (z.Status == ProjectStatus.Freeze ? "Отложен" : (z.Status == ProjectStatus.NotStarted ? "Не начат" : "Готов к проверке" ) ) ) ) ), z.PlannedStartDate, z.SystemStartDate, z.ActualEndDate, dStart, dEnd}); return deals; ===== Задача с датой окончания и статус отчёта по задаче ===== var tasks = dataContext.Zadacha_c88ec2_List .Where(z => z.GetChildrenHierarchy().Any()) .OrderByDescending(z => z.SystemEndDate) .Select(z => new { z.Name, z.PlannedEndDate, //Плановая ДО (ограничение) z.SystemEndDate, //Расчетная ДО (из планировщика) Otchet_o_statuse = z.GetChildrenHierarchy() .OrderByDescending(r => r.Date) .FirstOrDefault() .Status_056648.Name }); return tasks; ===== Контрагенты, у которых есть не закончившиеся инсталляции (через связи)===== var dStart = DateTime.Now; var Kontragents = dataContext.Kontragent_9e5de8_List .Where(z => z.Installyaciya_180ce0.Where(p => p.Data_okonchaniya_licenzii >= dStart).Any() ) .OrderBy(z => z.Name) .Select(z => new { z.Name, z.Id, RespobsibleId = z.Responsible.Id, z.Installyaciya_180ce0.FirstOrDefault().Data_okonchaniya_licenzii, Nazvanie_inst = z.Installyaciya_180ce0.FirstOrDefault().Name, Chislo = z.Installyaciya_180ce0.Count() }); return Kontragents; ===== Прошлогодние задачи конкретного пользователя===== var personId = parameters.GetValueOrDefault("PersonId", new Guid("50330e78-01c7-4280-9c74-2be072991628")); var previousYear = DateTime.Now.AddYears(-1).Year; var tasks = dataContext.Zadacha_razrabotki_6ad838_List .Where(z => z.Celj_Opisanie != null && z.PlannedStartDate.Value.Year == previousYear && z.Responsible.Id == personId) .OrderByDescending(z => z.PlannedStartDate) .Select(z => new { z.Name, z.SystemStartDate, z.SystemEndDate, z.Celj_Opisanie, z.Trudoyomkostj }); return tasks; ===== Сделки созданные за апрель 2019 ===== var deals = dataContext.Sdelka_3f169d_List .Where(z => z.CreationDate >= new DateTime(2019, 4, 1) && z.CreationDate < new DateTime(2019, 5, 1) ) .OrderBy(z => z.Name) .Select(z => new { Sdelka = z.Name, KontragentName = z.GetParentHierarchy().FirstOrDefault().Name, boss = String.Concat(z.Owner.LastName, " ", z.Owner.FirstName), responsible = String.Concat(z.Responsible.LastName, " ", z.Responsible.FirstName), Creator = String.Concat(z.Creator.LastName, " ", z.Creator.FirstName), Status = (z.Status == ProjectStatus.InWork ? "В работе" : (z.Status == ProjectStatus.Complete ? "Выполнен" : (z.Status == ProjectStatus.Cancelled ? "Отменен" : (z.Status == ProjectStatus.Freeze ? "Отложен" : (z.Status == ProjectStatus.NotStarted ? "Не начат" : "Готов к проверке" ) ) ) ) ), Prichina_otkaza = z.Prichini_otkaza_5ad9a4.Name, z.SystemEndDate, z.SystemStartDate, z.ActualEndDate, delegirovano_menedjeru = ((DateTime?) z.Data_delegirovaniya_sotrudniku).HasValue ? 1 : 0 , Sdelka_length = DbFunctions.DiffDays(z.SystemStartDate, z.SystemEndDate) }); return deals; ===== Получение ID родителя ===== у объекта есть метод ''public TCustomType GetParent()'' - получение родителя, если родитель не TCustomType, то вернется ''null'' - возвращает прямого (ровно на 1 уровень вверх) родителя если надо выше, то - ''public ICollection GetParentHierarchy(bool includeRoot)'' получение родителей с учетом иерархии ==== Поиск родителя ==== var nodeGUID = parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.ProjectId, new Guid("3e637a10-51b8-4a02-89fe-35b645969ca5")); var projects = dataContext.Projects .Where(p => p.GetParentHierarchy(true).Any(i => i.Id == nodeGUID)) .OrderBy(p => p.Parent.Id) .OrderBy(p => p.CreationDate) .Select(p => new{ p.Name, object_id = p.Id, ParentId = p.Parent.Id }); return projects; ===== Запрос по проекту (с выводом количества разного рода объектов) для анализа состояния проекта ===== Запрос по проекту, позволяющий посчитать количество объектов для анализа состояния проекта: - Все объекты. - Все конечные объекты. - Количество работ без зависимостей. - Количество работ с фиксированными сроками. - Всего объектов просрочено. - Количество конечных работ с несвоевременным началом. - Количество приоритетных задач. - Конечных работе без отчета о ходе работ и т.п. var id = parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.ProjectId, null /* new Guid("273bf10a-f403-4e62-a95d-464ad94616af")*/ ); var idProject = id; var сегодня = DateTime.Now; var сегодня_7дн = сегодня.AddDays (-7); var сегодня_14дн = сегодня.AddDays (-14); var сегодня_плюс_12 = сегодня.AddMonths(12); var сегодня_плюс_3 = сегодня.AddMonths(3); var сегодня_мин_3_мес = сегодня.AddMonths(-3); // var currentYear = new DateTime(сегодня.Year.Month,1); var defaultCalendar = workCalendars.GetDefaultCalendar(); var dToday = DateTime.Now; var child = dataContext.Projects .Where(p => p.GetParentHierarchy(false).Any(a => a.Id == idProject)) .Where(a => a.GetChildren().Any() == false ) .Where(a => a.BaselinePlanEndDate != null && (a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.InWork)) .Select(p => new { p.Id, ParentId = p.Parent.Id, Calendar = p.CalendarId, Start = p.SystemStartDate, End = p.SystemEndDate, UDN = p.BaselinePlanStartDate, UDO = p.BaselinePlanEndDate, Status1 = p.Status, // HasChild = p.GetChildren().Any() == false }) .ToList() .Where(a => (Math.Round(workCalendars.GetWorkCalendar(a.Calendar).GetWorktimeDays(a.Start.Value.Date, a.End.Value.Date)) < (a.UDO != null ? Math.Round(workCalendars.GetWorkCalendar(a.Calendar).GetWorktimeDays(a.UDN.Value.Date, a.UDO.Value.Date)) : 0))) .Select(p => new { p.Id, p.ParentId, p.Calendar, p.Start, p.End, p.UDN, p.UDO, p.Status1, План_длительность = Math.Round(workCalendars.GetWorkCalendar(p.Calendar).GetWorktimeDays(p.Start.Value.Date, p.End.Value.Date)), Утв_длительность = p.UDO != null ? Math.Round(workCalendars.GetWorkCalendar(p.Calendar).GetWorktimeDays(p.UDN.Value.Date, p.UDO.Value.Date)) : 0, }); var projects = dataContext.Projects .Where(p => p.GetParentHierarchy(true).Any(r => r.Id == idProject)) .Where(p => p is Proekt_tipovoj_b9f9ae || p is Proekt_tipovoj_2_82b061 || p is Proekt_Lean_a65539) .Where(p => p.Name != null) .Select(p => new { ID_проекта = p.Id, Название_проекта = p.Name, Руководитель = String.Concat(p.Owner.LastName, " ", p.Owner.FirstName), План_завершения = DbFunctions.TruncateTime(p.SystemEndDate), SystemStartDate = DbFunctions.TruncateTime(p.SystemStartDate), SystemEndDate = DbFunctions.TruncateTime(p.SystemEndDate), Утвержд_завершение = DbFunctions.TruncateTime(p.BaselinePlanEndDate), Утвержд_начало = DbFunctions.TruncateTime(p.BaselinePlanStartDate), Процент_завершения = p.PercentComplete, Всего_объектов = p.GetChildrenHierarchy(false).Select(a => a.Name != null).Count(), Всего_конечных_объектов = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false).Count(), Конечных_год_вперед_1 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.SystemEndDate >= сегодня && a.SystemEndDate <= сегодня_плюс_12).Count(), Конечных_более1мес_1 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.SystemEndDate >= сегодня && a.SystemEndDate <= сегодня_плюс_12 && DbFunctions.DiffDays(a.SystemStartDate,a.SystemEndDate)> 31).Count(), Колво_работ_без_связей_2 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Dependencies.In.Count == 0).Count(), Колво_работ_с_фиксом_3 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.PlannedStartDate.HasValue || a.PlannedEndDate.HasValue).Count(), Всего_объектов_просрочено_5 = p.GetChildrenHierarchy(false).Where(a => a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.InWork || a.Status == ProjectStatus.Ready).Where(s => DbFunctions.TruncateTime(s.SystemEndDate) < DbFunctions.TruncateTime(сегодня)).Count(), Всего_объектов_критич_6 = p.GetChildrenHierarchy(false).Where(a => a.Priority == 1).Count(), /*В ПОСТОБРАБОТКЕ СЧИТАЕТ РАБ.ДНИ*/ Конечных_длит_7 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.BaselinePlanEndDate != null && (a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.InWork) && DbFunctions.DiffDays(a.SystemStartDate,a.SystemEndDate) < DbFunctions.DiffDays(a.BaselinePlanStartDate,a.BaselinePlanEndDate)).Count(), Длительность_проекта = DbFunctions.DiffDays(p.SystemStartDate, p.SystemEndDate), Длительность_проекта_9 = (100 - ((DbFunctions.DiffDays(p.BaselinePlanEndDate, p.BaselinePlanStartDate))/(DbFunctions.DiffDays(p.SystemEndDate, p.SystemStartDate))) * 100), Конечных_несвоевр_начало_12 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority != 1).Where (s => s.ActualStartDate != null ? DbFunctions.DiffDays(s.SystemStartDate,s.ActualStartDate) > 7 : s.SystemStartDate < сегодня_7дн).Count(), /*ПРОВЕРИТЬ*/ Конечных_несвоевр_начало_критич_12 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority == 1).Where (s => s.ActualStartDate != null ? DbFunctions.DiffDays(s.SystemStartDate,s.ActualStartDate) > 7 : s.SystemStartDate < сегодня_7дн).Count(), Конечных_без_отчета_13 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority != 1).Where(a => (a.Status == ProjectStatus.InWork && a.SystemStartDate < сегодня_14дн) || ( a.Status == ProjectStatus.NotStarted && DbFunctions.TruncateTime(a.SystemStartDate) < DbFunctions.TruncateTime(сегодня) )).Where(a => a.GetChildren().OrderByDescending(r => r.Date).FirstOrDefault().Date < сегодня_14дн || a.GetChildren().OrderByDescending(r => r.Date).FirstOrDefault().Date == null ).Count(), Конечных_крит_без_отчета_13 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority == 1).Where(a => (a.Status == ProjectStatus.InWork && a.SystemStartDate < сегодня_14дн) || ( a.Status == ProjectStatus.NotStarted && DbFunctions.TruncateTime(a.SystemStartDate) < DbFunctions.TruncateTime(сегодня) )).Where(a => a.GetChildren().OrderByDescending(r => r.Date).FirstOrDefault().Date < сегодня_14дн || a.GetChildren().OrderByDescending(r => r.Date).FirstOrDefault().Date == null ).Count(), Конечных_просроченных_без_отчета_14 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority != 1) .Where(a => a.Status == ProjectStatus.InWork || a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.Freeze) .Where(s => s.BaselinePlanEndDate != null && DbFunctions.TruncateTime(сегодня) > DbFunctions.TruncateTime(s.BaselinePlanEndDate)).Count(), Конечных_просроченных_14_со_статусом = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority != 1) .Where(a => a.Status == ProjectStatus.InWork || a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.Freeze) .Where(s => s.BaselinePlanEndDate != null && DbFunctions.TruncateTime(сегодня) > DbFunctions.TruncateTime(s.BaselinePlanEndDate)) .Where(h => h.GetChildren().Where(r => r.Date >= сегодня_мин_3_мес).Any(s => s.Indikator_problem_b7386a.Id == Classifier_Indikator_problem_6c3d8e.Krizis_96cbc3ec_Id || s.Indikator_problem_b7386a.Id == Classifier_Indikator_problem_6c3d8e.Problemi_47ab098b_Id)).Count(), Конечных_критич_без_отчета_14 = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority == 1) .Where(a => a.Status == ProjectStatus.InWork || a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.Freeze) .Where(s => s.BaselinePlanEndDate != null && DbFunctions.TruncateTime(сегодня) > DbFunctions.TruncateTime(s.BaselinePlanEndDate)).Count(), Конечных_критич_14_со_статусом = p.GetChildrenHierarchy(false).Where(a => a.GetChildren().Any() == false && a.Priority == 1) .Where(a => a.Status == ProjectStatus.InWork || a.Status == ProjectStatus.NotStarted || a.Status == ProjectStatus.Freeze) .Where(s => s.BaselinePlanEndDate != null && DbFunctions.TruncateTime(сегодня) > DbFunctions.TruncateTime(s.BaselinePlanEndDate)) .Where(h => h.GetChildren().Where(r => r.Date >= сегодня_мин_3_мес).Any(s => s.Indikator_problem_b7386a.Id == Classifier_Indikator_problem_6c3d8e.Krizis_96cbc3ec_Id || s.Indikator_problem_b7386a.Id == Classifier_Indikator_problem_6c3d8e.Problemi_47ab098b_Id)).Count(), new_колво_мес_КТ_4 = p.GetChildrenHierarchy(false).Where(k => k is KT_1_f0f97e || k is KT_2_6393db || k is KT_3_f1cf19).Where(a => a.SystemEndDate >= сегодня && a.SystemEndDate <= сегодня_плюс_12).GroupBy(g => g.SystemEndDate.Value.Month).Count(), new_колво_мес_проект_4 = DbFunctions.DiffMonths(сегодня, p.SystemEndDate <= сегодня_плюс_12 ? p.SystemEndDate : сегодня_плюс_12), Сегодня = DbFunctions.TruncateTime(сегодня), Плюс_12_мес_= сегодня_плюс_12, Тек_мес_14дн = сегодня_14дн, }) .ToList() .Select(p => new{ p.ID_проекта, p.Название_проекта, p.Руководитель, p.SystemStartDate, p.SystemEndDate, p.Утвержд_завершение, p.Утвержд_начало, p.Процент_завершения, p.Всего_объектов, p.Всего_конечных_объектов, p.Конечных_год_вперед_1, p.Конечных_более1мес_1, Колво_работ_без_связей_2 = p.Колво_работ_без_связей_2 == 0 ? 0 : p.Колво_работ_без_связей_2 - 1, p.Колво_работ_с_фиксом_3, p.Всего_объектов_просрочено_5, p.Всего_объектов_критич_6, Конечных_длит_7 = child.Count(), p.Длительность_проекта, p.Длительность_проекта_9, p.Конечных_несвоевр_начало_12, p.Конечных_несвоевр_начало_критич_12, p.Конечных_без_отчета_13, p.Конечных_крит_без_отчета_13, Конечных_просроченных_без_отчета_14 = p.Конечных_просроченных_без_отчета_14 - p.Конечных_просроченных_14_со_статусом, Конечных_критич_без_отчета_14 = p.Конечных_критич_без_отчета_14 - p.Конечных_критич_14_со_статусом, p.new_колво_мес_КТ_4, p.new_колво_мес_проект_4, p.Сегодня, }) .ToList(); return projects; ===== Объединение плановых и фактических трудозатрат ===== var Portfel = parameters.GetValueOrDefault("Portfel", "14c8bd68-96c9-46e5-b870-5ef4e341e4f9"); var Текущие_проекты = new Guid("1d1ac40d-156b-4726-b2be-877aae71deaa"); var plan = dataContext.ProjectCosts .Where(p => p.Project.GetParentHierarchy(true).Any(r => r.Id == Текущие_проекты)) .Select(c => new { ProjectUID = (Guid?)c.Project.GetParentHierarchy(true).FirstOrDefault().Id, TaskUID = c.ProjectId, // ProjectName = c.Project.Name, // ResourceUID_plan = c.PersonId, // ResourseUID_fakt = (String?) "факт", Date = (DateTime?)c.Date, Plan = (double?)c.Value, Fact = (double?)null }) .ToList(); var faсt = dataContext.Fakticheskie_trudozatrati_977ff0_List .Where(p => p.Project.GetParentHierarchy(true).Any(r => r.Id == Текущие_проекты)) .Select(f => new { ProjectUID = (Guid?)f.Project.GetParentHierarchy(true).FirstOrDefault().Id, TaskUID = f.Project.Id, // ProjectName = f.Project.Name, // ResourceUID_plan = (String?) "план", // ResourseUID_fakt = f.Resurs_caaaaa, f.Date, Plan = (double?)null, Fact = (double?)f.Summa_06ff93, }) .ToList(); var costs = plan.Union(faсt) .GroupBy(c => (c.Date, c.TaskUID), (keys, values) => new { values.FirstOrDefault().ProjectUID, keys.TaskUID, // values.FirstOrDefault().ProjectName, keys.Date, Plan = values.Sum(s => s.Plan), Fact = values.Sum(s => s.Fact) }) .ToList(); return costs; ===== Запрос с параметром, для использования предфильтра в excel-отчете ===== Cам параметр отдельно: var classifier1 = parameters.GetValueOrDefault("Proizvodstvo___peredel", new ClassifierItem{}).Id; Фильтр по параметру в основном запросе: .Where(ps => classifier1 != Guid.Empty ? (ps.Proizvodstvo___peredel_93e62e.Id == classifier1) : true) В самом предфильтре значение параметра: Proizvodstvo___peredel var id = parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.ProjectId, null); var startDatePTR = parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.StartDate, DateTime.Now); var idPTR = id; // parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.ProjectId, id); var endDatePTR = parameters.GetValueOrDefault(QueryParameters.SpreadsheetReport.EndDate, DateTime.Now); var endDate = endDatePTR.Value.AddDays (1); var currentYear = new DateTime(endDatePTR.Value.Year, 1, 1); var currentYearend = currentYear.AddMonths(12); var k1 = currentYear.AddMonths(3); var k2 = k1.AddMonths(3); var k3 = k2.AddMonths(3); var k4 = k3.AddMonths(3); var y2 = currentYear.AddYears(1); var y3 = currentYear.AddYears(2); var y4 = currentYear.AddYears(3); //*************************************************************************** //ФИЛЬТР_1 var classifier1 = parameters.GetValueOrDefault("Proizvodstvo___peredel", new ClassifierItem{}).Id; //*************************************************************************** var kt_3 = dataContext.KT_3_f1cf19_List .Where(kt3 => kt3.GetParentHierarchy<_PTR_predpriyatiya_Holdinga_41f8ea>(true).Any(r => r.Id == idPTR)) .Where(kt3 => kt3.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).Any()) .Where(kt3 => kt3.Status != ProjectStatus.Cancelled ) .OrderBy(kt3 => kt3.CreationDate) .Select(kt3 => new { kt3.Name, MeropriyatieId = kt3.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).FirstOrDefault().Id, EtapPtrId = (Guid?)kt3.GetParentHierarchy(true).FirstOrDefault().Id, PsId = (Guid?)kt3.GetParentHierarchy(true).FirstOrDefault().Id, Служебный_тип_для_оборудования = (Guid?)kt3.Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_ab7e86.Id, kt3.BaselinePlanEndDate, kt3.ActualEndDate, }) .ToList(); var report22 = dataContext.Poziciya_specifikacii_437efa_List .Where(ps => ps.Otnoshenie_k_chasti_PTR_c2c87f.Id == Classifier_Otnoshenie_k_chasti_PTR_0d5548.Osnovnaya_chastj_890632c4_Id || ps.Otnoshenie_k_chasti_PTR_c2c87f.Id == null) .Where(ps => ps.Data_vklyucheniya_v_PTR_73d436 >= startDatePTR.Value) .Where(ps => ps.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).FirstOrDefault().BaselinePlanStartDate < currentYearend) .Where(ps => ps.GetParentHierarchy<_PTR_predpriyatiya_Holdinga_41f8ea>(true).Any(r => r.Id == idPTR)) .Where(ps => ps.Status == ProjectStatus.InWork || ps.Status == ProjectStatus.NotStarted || ps.Status == ProjectStatus.Ready || ps.Status == ProjectStatus.Complete || ps.Status == ProjectStatus.Freeze ) .Where(ps => ps.Gruppa_oborudovaniya_fdcaf9.Id == Classifier_Gruppa_oborudovaniya_94eb92.Osnovnoe_0dfc21cd_Id || ps.Gruppa_oborudovaniya_fdcaf9.Id == Classifier_Gruppa_oborudovaniya_94eb92.Komplektuyuschee_7517702d_Id) .Where(ps => ps.Kategoriya_rashodov_d87c7c.Id == Classifier_Kategoriya_rashodov_df2928.Kapitaliziruemie_bcc3e43c_Id) .Where(ps => ps.Razdel_PTR_730d6c.Id == Classifier_Razdel_PTR_27f85e._22_6200148b_Id) .Where(ps => classifier1 != Guid.Empty ? (ps.Proizvodstvo___peredel_93e62e.Id == classifier1) : true) .OrderBy(ps => ps.CreationDate) .Select(ps => new { ID_проекта = ps.Id, Название_проекта = ps.Name, Производство_передел = ps.Proizvodstvo___peredel_93e62e.Name, Группа_оборудования = ps.Gruppa_oborudovaniya_fdcaf9.Name, Отношение_к_части_ПТР = ps.Otnoshenie_k_chasti_PTR_c2c87f.Name, Код_МПОФ = ps.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).FirstOrDefault().Kod_meropriyatiya_POF_b040c3, ID_МПОФ = ps.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).FirstOrDefault().Id, Марка_оборудования = ps.GetChildren().FirstOrDefault().Marka_oborudovaniya_2d9569, Фирма_страна_производитель = ps.GetChildren().FirstOrDefault().Firma___Strana_proizvoditelj_e5f645, Фирма_страна_поставщик = ps.GetChildren().FirstOrDefault().Firma___Strana_postavschik_b87136, ID_узкого_места = (Guid?)ps.Svyazan_s__uzkim_mestom_459c92_08ee48.FirstOrDefault().Id, Код_узкого_места = ps.Svyazan_s__uzkim_mestom_459c92_08ee48.FirstOrDefault().Kod_uzkogo_mesta_6f8714, Кол_во = ps.Kol__vo_6a6a43, Бюджет_ПОФ = ps.GetChildren().Sum(s => s.Byudzhet_POF_rub_07eb8e), Дата_включения_в_ПТР = ps.Data_vklyucheniya_v_PTR_73d436, ФАКТ_платежи = ps.GetChildren().Sum(s => s.Summa_platezha_1627e7), ФАКТ_платежи_с_предыдущих_лет = ps.GetChildren().Where(f => f.Date < currentYear).Sum(s => s.Summa_platezha_1627e7), Причины_отклонений = ps.GetChildren().OrderByDescending(r => r.Date).FirstOrDefault().Prichini_otklonenij_737f87, Предприятия_холдинга = ps.GetParentHierarchy<_PTR_predpriyatiya_Holdinga_41f8ea>(true).FirstOrDefault().Predpriyatie_Holdinga_d4b276.Name, Кол_во_Факт = ps.Kol__vo_FAKT_747cbf, План_сумма_1_кв = ps.GetChildren().Where(p => p.Date >= currentYear && p.Date < k1).Sum(s => s.Byudzhet_POF_Platezhi_rub_411552), План_сумма_2_кв = ps.GetChildren().Where(p => p.Date >= k1 && p.Date < k2).Sum(s => s.Byudzhet_POF_Platezhi_rub_411552), План_сумма_3_кв = ps.GetChildren().Where(p => p.Date >= k2 && p.Date < k3).Sum(s => s.Byudzhet_POF_Platezhi_rub_411552), План_сумма_4_кв = ps.GetChildren().Where(p => p.Date >= k3 && p.Date < k4).Sum(s => s.Byudzhet_POF_Platezhi_rub_411552), Факт_сумма_1_кв = ps.GetChildren().Where(p => p.Date >= currentYear && p.Date < k1 && p.Date <= endDatePTR).Sum(s => s.Summa_platezha_1627e7), Факт_сумма_2_кв = ps.GetChildren().Where(p => p.Date >= k1 && p.Date < k2 && p.Date <= endDatePTR).Sum(s => s.Summa_platezha_1627e7), Факт_сумма_3_кв = ps.GetChildren().Where(p => p.Date >= k2 && p.Date < k3 && p.Date <= endDatePTR).Sum(s => s.Summa_platezha_1627e7), Факт_сумма_4_кв = ps.GetChildren().Where(p => p.Date >= k3 && p.Date < k4 && p.Date <= endDatePTR).Sum(s => s.Summa_platezha_1627e7), Номер_договора = ps.GetParentHierarchy(true).FirstOrDefault().Nomer_dogovora_4c7e89, MeropriyatieId = (Guid?)ps.GetParentHierarchy<_Meropriyatie_POF_fada13>(true).FirstOrDefault().Id, EtapPtrId = (Guid?)ps.GetParentHierarchy(true).FirstOrDefault().Id, }) .ToList() .Select(p => new{ p.ID_проекта, p.Название_проекта, p.Производство_передел, p.Группа_оборудования, p.Отношение_к_части_ПТР, p.Код_МПОФ, p.ID_МПОФ, p.Марка_оборудования, p.Фирма_страна_производитель, p.Фирма_страна_поставщик, p.ID_узкого_места, p.Код_узкого_места, p.Кол_во, p.Бюджет_ПОФ, p.Дата_включения_в_ПТР, p.ФАКТ_платежи, p.ФАКТ_платежи_с_предыдущих_лет, p.Причины_отклонений, p.Предприятия_холдинга, p.Кол_во_Факт, p.План_сумма_1_кв, p.План_сумма_2_кв, p.План_сумма_3_кв, p.План_сумма_4_кв, p.Факт_сумма_1_кв, p.Факт_сумма_2_кв, p.Факт_сумма_3_кв, p.Факт_сумма_4_кв, КТ_ТЗ_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .BaselinePlanEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .BaselinePlanEndDate, КТ_ТЗ_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .ActualEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .ActualEndDate, КТ_Конкурс_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .BaselinePlanEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .BaselinePlanEndDate, КТ_Конкурс_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .ActualEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .ActualEndDate, КТ_Договор_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .BaselinePlanEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .BaselinePlanEndDate, КТ_Договор_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? .ActualEndDate ?? kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? .ActualEndDate, КТ_Поставка_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Postavka_osuschestvlena_d8967234_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .BaselinePlanEndDate, КТ_Поставка_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Postavka_osuschestvlena_d8967234_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .ActualEndDate, КТ_Монтаж_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Montazh_osuschestvlen_73254f39_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .BaselinePlanEndDate, КТ_Монтаж_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Montazh_osuschestvlen_73254f39_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .ActualEndDate, КТ_Ввод_в_Э_план = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Oborudovanie_vvedeno_v_ekspluataciyu_c2bc6e62_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .BaselinePlanEndDate, КТ_Ввод_в_Э_факт = kt_3 .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Oborudovanie_vvedeno_v_ekspluataciyu_c2bc6e62_Id) .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? .ActualEndDate, p.Номер_договора, }) .Select(p => new{ p.ID_проекта, p.Название_проекта, p.Производство_передел, p.Группа_оборудования, p.Отношение_к_части_ПТР, p.Код_МПОФ, p.ID_МПОФ, p.Марка_оборудования, p.Фирма_страна_производитель, p.Фирма_страна_поставщик, p.ID_узкого_места, p.Код_узкого_места, p.Кол_во, p.Бюджет_ПОФ, p.Дата_включения_в_ПТР, p.ФАКТ_платежи, p.ФАКТ_платежи_с_предыдущих_лет, p.Причины_отклонений, p.Предприятия_холдинга, p.План_сумма_1_кв, p.План_сумма_2_кв, p.План_сумма_3_кв, p.План_сумма_4_кв, p.Факт_сумма_1_кв, p.Факт_сумма_2_кв, p.Факт_сумма_3_кв, p.Факт_сумма_4_кв, p.КТ_ТЗ_план, КТ_ТЗ_факт = p.КТ_ТЗ_факт < endDate ? p.КТ_ТЗ_факт : null, p.КТ_Конкурс_план, КТ_Конкурс_факт = p.КТ_Конкурс_факт < endDate ? p.КТ_Конкурс_факт : null, p.КТ_Договор_план, КТ_Договор_факт = p.КТ_Договор_факт < endDate ? p.КТ_Договор_факт : null, p.КТ_Поставка_план, КТ_Поставка_факт = p.КТ_Поставка_факт < endDate ? p.КТ_Поставка_факт : null, p.КТ_Монтаж_план, КТ_Монтаж_факт = p.КТ_Монтаж_факт < endDate ? p.КТ_Монтаж_факт : null, p.КТ_Ввод_в_Э_план, КТ_Ввод_в_Э_факт = p.КТ_Ввод_в_Э_факт < endDate ? p.КТ_Ввод_в_Э_факт : null, p.Номер_договора, p.Кол_во_Факт, }) .ToList() .OrderBy(o => o.Производство_передел) .ThenByDescending(o => o.Группа_оборудования) .ThenBy(o => o.Код_МПОФ); return report22; ===== Объединение трудозатрат по ресурсам, проектам ===== var Today = DateTime.Today; var ThisMonth = new DateTime (Today.Year, Today.Month, 1); //var EndMonth = ThisMonth.AddYears(2).AddMonths(-1); var IDprj = parameters.GetValueOrDefault("RootProjectId", new Guid("402b52cf-65d2-4c94-9e8b-f141e77aac55")); var Person = dataContext.Persons.Select(a => new {a.Id, a.LastName}).ToList(); var Costs = dataContext.ProjectCosts .Where( p => p.Project.Name != null && p.Value != 0 && p.Project.GetParentHierarchy(true).Any(x => x.Id == IDprj)) .Select( p => new { Договор = p.Project.GetParentHierarchy(true).FirstOrDefault().Name, Ресурс = p.Person.LastName, ID_Ресурса = p.Person.Id, Трудозатраты = p.Value, }).ToList().GroupBy(u=>new {u.Договор, u.Ресурс}, (key, group) => new { Договор = key.Договор, Ресурс = key.Ресурс, ID_Ресурса = group.FirstOrDefault().ID_Ресурса.ToString(), Трудозатраты = Math.Round(group.Sum(a => a.Трудозатраты))}).OrderBy(x => x.Договор).ToList(); var FactCost = dataContext.Uchet_vremeni_977ff0_List .Where (p => p.Project.Name != null && p.Summa_06ff93 != null && p.Project.GetParentHierarchy(true).Any(x => x.Id == IDprj)) .Select(p => new{ Договор = p.Project.GetParentHierarchy(true).FirstOrDefault().Name, ID_Ресурса = p.Resurs_caaaaa, Факт = p.Summa_06ff93, }) .ToList() .Select(p => new { p.Договор, Ресурс = Person.Where(a => a.Id.ToString() == p.ID_Ресурса).FirstOrDefault().LastName, p.ID_Ресурса, p.Факт }) .ToList() .GroupBy(u=>new {u.Договор, u.ID_Ресурса}, (key, group) => new { Договор = key.Договор, Ресурс = group.FirstOrDefault().Ресурс, ID_Ресурса = key.ID_Ресурса.ToString(), Факт = Math.Round((double)group.Sum(a => a.Факт))}).OrderBy(x => x.Договор).ToList(); var CorrCost = dataContext.Korrektirovka_videlennih_chasov_421cbf_List .Where (p => p.Project.Name != null && p.Summa_06ff93 != null && p.Project.GetParentHierarchy(true).Any(x => x.Id == IDprj)) .Select(p => new{ Договор = p.Project.GetParentHierarchy(true).FirstOrDefault().Name, ID_Ресурса = p.Resurs_caaaaa, Корректировка = p.Summa_06ff93, Дата = p.Date }) .ToList() .Select(p => new { p.Договор, Ресурс = Person.Where(a => a.Id.ToString() == p.ID_Ресурса).FirstOrDefault().LastName, p.ID_Ресурса, p.Корректировка, Месяц_Корректировки = new DateTime (p.Дата.Value.Year, p.Дата.Value.Month, 1) }) .ToList() .GroupBy(u=>new {u.Договор, u.ID_Ресурса}, (key, group) => new { Договор = key.Договор, Ресурс = group.FirstOrDefault().Ресурс, ID_Ресурса = key.ID_Ресурса.ToString(), Корректировка = Math.Round((double)group.Sum(a => a.Корректировка)), }).OrderBy(x => x.Договор).ToList(); var JoinCost1 = FactCost.GroupJoin(Costs, x => new {x.ID_Ресурса, x.Договор}, u => new {u.ID_Ресурса, u.Договор}, (x,u) => new{ Договор = x.Договор, Ресурс = x.Ресурс, ID_Ресурса = x.ID_Ресурса, Трудозатраты = u.Sum(a =>a.Трудозатраты), Факт = x.Факт }).ToList(); var JoinCost2 = Costs.GroupJoin(FactCost, x => new {x.ID_Ресурса, x.Договор}, u => new {u.ID_Ресурса, u.Договор}, (x,u) => new{ Договор = x.Договор, Ресурс = x.Ресурс, ID_Ресурса = x.ID_Ресурса, Трудозатраты = x.Трудозатраты, Факт = u.Sum(a=>a.Факт) }).ToList(); var UnionCost1 = JoinCost1.Union(JoinCost2).ToList(); var JoinCost3 = UnionCost1.GroupJoin(CorrCost, x => new {x.ID_Ресурса, x.Договор}, u => new {u.ID_Ресурса, u.Договор}, (x,u) => new{ Договор = x.Договор, Ресурс = x.Ресурс, ID_Ресурса = x.ID_Ресурса, Трудозатраты = x.Трудозатраты, Факт = x.Факт, Корректировка = u.Sum(a=>a.Корректировка), }).ToList(); var JoinCost4 = CorrCost.GroupJoin(UnionCost1, x => new {x.ID_Ресурса, x.Договор}, u => new {u.ID_Ресурса, u.Договор}, (x,u) => new{ Договор = x.Договор, Ресурс = x.Ресурс, ID_Ресурса = x.ID_Ресурса, Трудозатраты = u.Sum(a =>a.Трудозатраты), Факт = u.Sum(a => a.Факт), Корректировка = x.Корректировка, }).ToList(); var UnionCost2 = JoinCost3.Union(JoinCost4).ToList(); var CostSum = UnionCost2 .Select( p => new { Договор = p.Договор, Ресурс = "", ID_Ресурса = "", Трудозатраты = p.Трудозатраты, Факт = p.Факт, Корректировка = p.Корректировка, }).ToList().GroupBy(u=>new {u.Договор}, (key, group) => new { Договор = key.Договор, Ресурс = key.Договор, ID_Ресурса = "", Трудозатраты = Math.Round(group.Sum(a => a.Трудозатраты)), Факт = Math.Round(group.Sum(a => a.Факт)), }).OrderBy(x => x.Договор).ToList(); var Result = UnionCost2.Concat(CostSum).OrderBy(x => x.Ресурс).OrderBy(x => x.Договор).ToList(); return Result; ===== Поиск задач в проекте с максимальным отклонением ===== var сегодня = DateTime.Now; var zadacha = dataContext.Zadacha_2b33fa_List .Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork) .Where(p => p.GetParentHierarchy(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(false).Where(p => p is IT__proekt_ff08df || p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5).FirstOrDefault().Id, Проект_name = p.GetParentHierarchy(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(QueryParameters.SpreadsheetReport.ProjectId, null); var idproject = id; var Katalog = parameters.GetValueOrDefault("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(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(true).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().SystemEndDate, УДО_Задача_на_КП = p.GetChildrenHierarchy(true).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().BaselinePlanEndDate, Задача_КП = p.GetChildrenHierarchy(false).Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork).OrderByDescending(r => r.SystemEndDate).FirstOrDefault().Name, Задача_КП_ID = (Guid?)p.GetChildrenHierarchy(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; ===== Последняя по времени запись в протоколе ===== // Пример linq-запроса на событие последнего изменения объекта: var projectId = parameters.GetValueOrDefault("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; // Возвращаем список, содержащий последнюю запись или пустой список