Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| product:linq:exaples [15.09.2025 09:09] – ekaterina.menkhuzina | product:linq:exaples [15.09.2025 13:14] (текущий) – ekaterina.menkhuzina | ||
|---|---|---|---|
| Строка 651: | Строка 651: | ||
| ===== Объединение трудозатрат по ресурсам, | ===== Объединение трудозатрат по ресурсам, | ||
| <code csharp> | <code csharp> | ||
| + | var Today = DateTime.Today; | ||
| + | var ThisMonth = new DateTime (Today.Year, | ||
| + | //var EndMonth = ThisMonth.AddYears(2).AddMonths(-1); | ||
| + | var IDprj = parameters.GetValueOrDefault< | ||
| + | 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< | ||
| + | .Select( p => new { | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | Ресурс = p.Person.LastName, | ||
| + | ID_Ресурса = p.Person.Id, | ||
| + | Трудозатраты = p.Value, | ||
| + | }).ToList().GroupBy(u=> | ||
| + | Договор = 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< | ||
| + | .Select(p => new{ | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | 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=> | ||
| + | Договор = 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< | ||
| + | .Select(p => new{ | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | 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, | ||
| + | }) | ||
| + | .ToList() | ||
| + | .GroupBy(u=> | ||
| + | Договор = key.Договор, | ||
| + | Ресурс = group.FirstOrDefault().Ресурс, | ||
| + | ID_Ресурса = key.ID_Ресурса.ToString(), | ||
| + | Корректировка = Math.Round((double)group.Sum(a => a.Корректировка)), | ||
| + | }).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | var JoinCost1 = FactCost.GroupJoin(Costs, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = u.Sum(a => | ||
| + | Факт = x.Факт | ||
| + | }).ToList(); | ||
| + | var JoinCost2 = Costs.GroupJoin(FactCost, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = x.Трудозатраты, | ||
| + | Факт = u.Sum(a=> | ||
| + | }).ToList(); | ||
| + | |||
| + | var UnionCost1 = JoinCost1.Union(JoinCost2).ToList(); | ||
| + | |||
| + | var JoinCost3 = UnionCost1.GroupJoin(CorrCost, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = x.Трудозатраты, | ||
| + | Факт = x.Факт, | ||
| + | Корректировка = u.Sum(a=> | ||
| + | }).ToList(); | ||
| + | var JoinCost4 = CorrCost.GroupJoin(UnionCost1, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = u.Sum(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=> | ||
| + | Договор = 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; | ||
| + | </ | ||
| + | |||
| + | ===== Поиск задач в проекте с максимальным отклонением ===== | ||
| + | <code csharp> | ||
| + | var сегодня = DateTime.Now; | ||
| + | |||
| + | var zadacha = dataContext.Zadacha_2b33fa_List | ||
| + | .Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork) | ||
| + | .Where(p => p.GetParentHierarchy< | ||
| + | .Select(p => new { | ||
| + | Проект_ID = | ||
| + | Проект_name = p.GetParentHierarchy< | ||
| + | Задача_КП = p.Name, | ||
| + | Задача_КП_ID = p.Id, | ||
| + | УДО = p.BaselinePlanEndDate, | ||
| + | ПДО = p.SystemEndDate, | ||
| + | ФДО = p.ActualEndDate, | ||
| + | p.CalendarId, | ||
| + | .ToList(); | ||
| + | var allzadacha = zadacha | ||
| + | .Select(r => new { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | r.УДО, | ||
| + | r.ПДО, | ||
| + | r.ФДО, | ||
| + | r.CalendarId, | ||
| + | Отклонение_Задач = r.УДО != null ? Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО.Value.Date, | ||
| + | //return allzadacha; | ||
| + | |||
| + | var id = parameters.GetValueOrDefault< | ||
| + | var idproject = id; | ||
| + | var Katalog = parameters.GetValueOrDefault< | ||
| + | var projects = dataContext.Projects | ||
| + | .Where(p => p is IT__proekt_ff08df || p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5) | ||
| + | .Where(d => (Guid? | ||
| + | .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.GetChildrenHierarchy< | ||
| + | УДО_Задача_на_КП = p.GetChildrenHierarchy< | ||
| + | |||
| + | Задача_КП = p.GetChildrenHierarchy< | ||
| + | Задача_КП_ID = (Guid? | ||
| + | Процент_вып_проекта = p.PercentComplete, | ||
| + | }) | ||
| + | |||
| + | .ToList() | ||
| + | .Select(r => new{ | ||
| + | | ||
| + | r.Id, | ||
| + | r.Name, | ||
| + | | ||
| + | r.УДН, | ||
| + | r.УДО, | ||
| + | r.ПДН, | ||
| + | r.ПДО, | ||
| + | r.ФДН, | ||
| + | r.ФДО, | ||
| + | r.CalendarId, | ||
| + | // | ||
| + | |||
| + | r.Задача_КП_ID, | ||
| + | r.Задача_КП, | ||
| + | r.ПДО_Задача_на_КП, | ||
| + | r.УДО_Задача_на_КП, | ||
| + | Отклонение_Задача_на_КП = r.Задача_КП_ID != null && r.УДО_Задача_на_КП != null ? Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО_Задача_на_КП.Value.Date, | ||
| + | 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 csharp> | ||
| + | // Пример linq-запроса на событие последнего изменения объекта: | ||
| + | var projectId = parameters.GetValueOrDefault< | ||
| + | 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; // Возвращаем список, | ||
| </ | </ | ||