2015-06-10 3 views
0

У меня есть два списка на основе других объектов.Список фильтров на основе другого списка

List<Emyployee> emyployeeList; 
List<Display> displayEmployeeList; 

У обоих из них есть идентификаторы сотрудников, но во втором списке есть только некоторые из них. Я хочу отфильтровать employeeList, что у меня есть все id этого arent в displayEmployeeList.

как я могу это сделать?

+0

Вы пробовали что-нибудь до сих пор? Если да, пожалуйста, предоставьте нам свою работу. – ckruczek

+0

Да, я пробовал это, но, очевидно, он не работает: newEmyployeeList = emyployeeList.FindAll (x => x.id! = DisplayEmployeeList [0] .id); –

+0

Хорошо, да, конечно, это не правильный способ сделать это. Потому что вы просто заботитесь о первом элементе 'displayEmployeeList'. Первым очевидным решением было бы сделать две петли foreach. Другим возможным решением, которое вы могли бы предпринять для учетной записи, было бы использовать [Zip] (https://msdn.microsoft.com/en-us/library/vstudio/dd267698%28v=vs.100%29.aspx) – ckruczek

ответ

0

Если displayEmployeeList имеет много элементов вы можете найти полезным создать своего рода индекса (как у РСУБД):

// let id be integer 
    HashSet<int> ids = new HashSet<int>(displayEmployeeList 
    .Select(item => item.id) 
); 

    // Just Linq where 
    var result = emyployeeList 
    .Where(item => !ids.Contains(item.id)); 
0

Вы могли бы использовать метод Zip расширения и сделать это как следующий :

employeeList.Zip(displayEmployeeList,(employee,display) => 
      { 
       if(employee.Id != display.Id) 
        return employee; 
      }); 
Смежные вопросы