У меня есть таблица для списка сотрудников с их руководителями. < /p>
| UserID | SupervisorUserId |
|--------|------------------|
| 10 | null |
| 1 | 10 |
| 2 | 1 |
| 3 | 1 |
| 4 | 3 |
| 5 | 10 |
| 6 | 5 |
| 7 | 6 |
| 8 | 6 |
| 9 | 8 |
Вот диаграмма для визуализации:
и здесь. PrettyPrint-Override ">public JsonResult GetEmployeesWithReportingLevel()
{
try
{
var getEmployees = GetEmployees().ToList();
var employeeList = (from e in getEmployees
where e.IsDeleted != true
select new ReportingLineList
{
UserId = e.UserId,
SupervisorId = e.SupervisorId
}).ToList();
var reportingLevel = (from emp in employeeList
select new
{
UserId = emp.UserId,
ReportingLevel = GetReportingLevel(employeeList, emp.UserId, 0)
}).ToList();
return new JsonResult(reportingLevel);
}
catch
{
throw;
}
}
< /code>
private int GetReportingLevel(IEnumerable employeeList, Guid UserId, int reportingLevel)
{
try
{
var reportingEmployees = (from emp in employeeList
where emp.SupervisorId == UserId
select new
{
UserId = emp.UserId
}).ToList();
foreach (var emp in reportingEmployees)
{
if (emp.UserId != null)
{
return GetReportingLevel(employeeList, (Guid)emp.UserId, reportingLevel + 1);
}
}
return reportingLevel;
}
catch
{
throw;
}
}
< /code>
Мой ожидаемый результат должен быть: < /p>
| UserId | Reporting level |
|--------|-----------------|
| 2 | 0 |
| 4 | 0 |
| 7 | 0 |
| 9 | 0 |
| 3 | 1 |
| 8 | 1 |
| 1 | 2 |
| 6 | 3 |
| 5 | 3 |
| 10 | 4 |
< /code>
С моим текущим результатом кажется, что он просто итерация с первым сотрудником, которого получит мой код. < /p>
Вот результат, который я получаю. < /p>
| UserId | Reporting level |
|--------|-----------------|
| 2 | 0 |
| 4 | 0 |
| 7 | 0 |
| 9 | 0 |
| 3 | 1 |
| 8 | 1 |
| 1 | 1 |
| 6 | 1 |
| 5 | 2 |
| 10 | 3 |
Подробнее здесь: https://stackoverflow.com/questions/723 ... -using-lin
Как получить список сотрудников и их уровень отчетности рекурсивно с использованием LINQ ⇐ C#
Место общения программистов C#
1749749430
Anonymous
У меня есть таблица для списка сотрудников с их руководителями. < /p>
| UserID | SupervisorUserId |
|--------|------------------|
| 10 | null |
| 1 | 10 |
| 2 | 1 |
| 3 | 1 |
| 4 | 3 |
| 5 | 10 |
| 6 | 5 |
| 7 | 6 |
| 8 | 6 |
| 9 | 8 |
Вот диаграмма для визуализации:
и здесь. PrettyPrint-Override ">public JsonResult GetEmployeesWithReportingLevel()
{
try
{
var getEmployees = GetEmployees().ToList();
var employeeList = (from e in getEmployees
where e.IsDeleted != true
select new ReportingLineList
{
UserId = e.UserId,
SupervisorId = e.SupervisorId
}).ToList();
var reportingLevel = (from emp in employeeList
select new
{
UserId = emp.UserId,
ReportingLevel = GetReportingLevel(employeeList, emp.UserId, 0)
}).ToList();
return new JsonResult(reportingLevel);
}
catch
{
throw;
}
}
< /code>
private int GetReportingLevel(IEnumerable employeeList, Guid UserId, int reportingLevel)
{
try
{
var reportingEmployees = (from emp in employeeList
where emp.SupervisorId == UserId
select new
{
UserId = emp.UserId
}).ToList();
foreach (var emp in reportingEmployees)
{
if (emp.UserId != null)
{
return GetReportingLevel(employeeList, (Guid)emp.UserId, reportingLevel + 1);
}
}
return reportingLevel;
}
catch
{
throw;
}
}
< /code>
Мой ожидаемый результат должен быть: < /p>
| UserId | Reporting level |
|--------|-----------------|
| 2 | 0 |
| 4 | 0 |
| 7 | 0 |
| 9 | 0 |
| 3 | 1 |
| 8 | 1 |
| 1 | 2 |
| 6 | 3 |
| 5 | 3 |
| 10 | 4 |
< /code>
С моим текущим результатом кажется, что он просто итерация с первым сотрудником, которого получит мой код. < /p>
Вот результат, который я получаю. < /p>
| UserId | Reporting level |
|--------|-----------------|
| 2 | 0 |
| 4 | 0 |
| 7 | 0 |
| 9 | 0 |
| 3 | 1 |
| 8 | 1 |
| 1 | 1 |
| 6 | 1 |
| 5 | 2 |
| 10 | 3 |
Подробнее здесь: [url]https://stackoverflow.com/questions/72300923/how-to-get-the-list-of-employees-and-their-reporting-level-recursively-using-lin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия