2016-07-04 2 views
-6

У меня есть список, содержащий свойство Id некоторых объектов. У меня есть список, где мне нужен новый список, но только объекты, которые имеют идентификатор в списке.Получить список <T> из списка <T>, который содержит сопоставление параметров в списке <int>

Как это сделать с наилучшей производительностью?

ответ

2

Использование LINQ:

List<MyClass> results = mylist.FindAll(x => listOfIds.Contains(x.ID)); 

Или, если listOfIds имеет много много записей:

HashSet<int> hashedIds = new HashSet<int>(listOfIds); 
List<MyClass> results = mylist.FindAll(x => hashedIds.Contains(x.ID)); 

Поиск Идентификаторы в HashSet<T> гораздо быстрее, чем List<T>

Если вам необходимо перечислить элементы один по одному затем:

IEnumerable<MyClass> results = mylist.Where(x => listOfIds.Contains(x.ID)); 
foreach(MyClass item in results) 
{ 
    // do your work 
}