найти элемент списка, который существует в другом списке - PullRequest
0 голосов
/ 19 октября 2018

У меня есть классный отдел и классный сотрудник.У работника класса есть свой список отделов.Если сотрудник содержит, например, 2 отдела, я хочу найти эти отделы в списке отделов, который содержит все отделы, и что-то делать только с ними.

        List<Department> list = new List<Department>();

        list.Add(new Department() { ID = 101, Name = "IT" });
        list.Add(new Department() { ID = 101, Name = "HR" });
        list.Add(new Department() { ID = 101, Name = "PR" });
        list.Add(new Department() { ID = 101, Name = "Payrol" });


        Employee employee = new Employee();
        employee.ID = 1;
        employee.Name = "John";
        employee.Gender = "Male";

        employee.Departments = new List<Department>();
        employee.Departments.Add(new Department() { ID = 101, Name = "IT" });
        employee.Departments.Add(new Department() { ID = 101, Name = "HR" });

        for (int i = 0; i < list.Count; i++)
        {
            //cannot use Contains because it is checking reference
            if (employee.Departments.Any(d => d.ID == list[i].ID))
                //i want to do something only with items that employee have :-( but this text will be added to all items
                list[i].Name += " employee have this list item";
        }

1 Ответ

0 голосов
/ 19 октября 2018

При условии, что класс Department реализует Equals и GetHashcode методы, которые вы можете попробовать Linq

Если вы хотите убедиться, что все отделы employee имеют list вы можете попробовать Except (нет никакого отдела, который находится в employee.Departments, но не в list):

 if (! employee.Departments.Except(list).Any()) {
   // All Departments of employee are within list
 }

Если вы хотите найти Department s, которые находятся в оба списка используют Intersect:

 var inBoth = employee
   .Departments   
   .Intersect(list);

 foreach (var depart in inBoth)
   depart.Name += " employee have this list item"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...