Как получить список сотрудников и их уровень отчетности рекурсивно с использованием LINQC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить список сотрудников и их уровень отчетности рекурсивно с использованием LINQ

Сообщение 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 |


Подробнее здесь: https://stackoverflow.com/questions/723 ... -using-lin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»