На организационной диаграмме не отображаются данные менеджера с идентификатором null --- самостоятельное соединение с левым внешним соединением - PullRequest
0 голосов
/ 26 марта 2020

Я выполняю диаграмму организации, отображая Организацию из списка, а затем добавляю, удаляю методы.

Я использую самоотключение LINQ с левым внешним объединением для отображения сведений о сотруднике менеджера, но я не могу Показать генеральный директор, чей идентификатор менеджера является нулевым.

// This block throws null refrence exception saying t1 is null
    //Managername is null
            var emp = (from m in employee
                                   join e1 in employee on m.ManagerId equals e1.EmpId into temp
                                   from t1 in temp.DefaultIfEmpty()
                                   select new Employee
                                   {
                                       EmpId = m.EmpId,
                                       EmployeeName = m.EmployeeName,
                                       Gender = m.Gender,
                                       ManagerId = t1?.ManagerId ?? 0  ,
                                       ManagerName = t1.EmployeeName,
                                       Designation = m.Designation
                                   }).ToList();

public class Employee
    {
        public int EmpId { get; set; }
        public string EmployeeName { get; set; }
        public char Gender { get; set; }
        public int? ManagerId { get; set; }
        public string Designation { get; set; }
        public string ManagerName { get; set; }
    }

List<Employee> employee = new List<Employee>();
            employee.Add(new Employee { EmpId = 3, EmployeeName = "Andrea Ely", Gender = 'F', ManagerId = 6, Designation = "Tech Head"});
            employee.Add(new Employee { EmpId = 4, EmployeeName = "John Eward", Gender = 'M', ManagerId = 3, Designation = "General" });
            employee.Add(new Employee { EmpId = 5, EmployeeName = "Lesli Mac", Gender = 'F', ManagerId = 3, Designation = "Staff" });
            employee.Add(new Employee { EmpId = 6, EmployeeName = "Satinder Singh", Gender = 'M', ManagerId = 13, Designation = "President" });
            employee.Add(new Employee { EmpId = 7, EmployeeName = "Amit Sarna", Gender = 'M', ManagerId = 13, Designation = "Vice President" });
            employee.Add(new Employee { EmpId = 8, EmployeeName = "David Steward", Gender = 'M', ManagerId = 7, Designation = "General" });
            employee.Add(new Employee { EmpId = 9, EmployeeName = "Rogger Binny", Gender = 'M', ManagerId = 7, Designation = "Sales Executive" });
            employee.Add(new Employee { EmpId = 10, EmployeeName = "Emy jackson", Gender = 'F', ManagerId = 7, Designation = "Sales Executive" });
            employee.Add(new Employee { EmpId = 11, EmployeeName = "Chris Harris", Gender = 'M', ManagerId = 7, Designation = "Executive" });
            employee.Add(new Employee { EmpId = 13, EmployeeName = "Rocky Balbo", Gender = 'M', ManagerId = null, Designation = "CEO" });





  // This block throws null refrence exception saying t1 is null
//Managername is null
        var emp = (from m in employee
                               join e1 in employee on m.ManagerId equals e1.EmpId into temp
                               from t1 in temp.DefaultIfEmpty()
                               select new Employee
                               {
                                   EmpId = m.EmpId,
                                   EmployeeName = m.EmployeeName,
                                   Gender = m.Gender,
                                   ManagerId = t1?.ManagerId ?? 0  ,
                                   ManagerName = t1.EmployeeName,
                                   Designation = m.Designation
                               }).ToList();

 Console.WriteLine("--------------Printing Manager-Employee Hierarchy-------------");
        foreach (var empDetails in emp)
        {               
             Console.WriteLine("Emp Name is {0} ManagerName is {1}", empDetails.EmployeeName, empDetails.ManagerName);               
        }

1 Ответ

0 голосов
/ 26 марта 2020

Вы можете использовать левое соединение, что-то вроде этого:

var emp = (from m in employee
    join e1 in employee on m.ManagerId equals e1.EmpId into temp
    from t1 in temp.DefaultIfEmpty()
    select new Employee
    {
      EmpId = m.EmpId,
      EmployeeName = m.EmployeeName,
      Gender = m.Gender,
      ManagerId = t1?.ManagerId ?? 0  ,
      ManagerName = t1?.EmployeeName,
      Designation = m.Designation
    }).ToList();

Официальные документы здесь .

...