Подтвердить что ты не робот

Найти элементы из списка, которые существуют в другом списке

У меня есть List<PropA>

PropA  
{  
    int a;  
    int b;  
}

и еще List<PropX>

PropX  
{  
    int a;  
    int b;  
}

Теперь мне нужно найти элементы из List<PropX>, которые существуют в List<PropA>, соответствующем свойству b, используя lambda или LINQ.

4b9b3361

Ответ 1

Что вы хотите сделать, это Join две последовательности. LINQ имеет оператор Join, который выполняет именно это:

List<PropX> first;
List<PropA> second;

var query = from firstItem in first
    join secondItem in second
    on firstItem.b equals secondItem.b
    select firstItem;

Обратите внимание, что оператор Join в LINQ также записывается для выполнения этой операции довольно эффективно, чем наивные реализации, которые будут выполнять линейный поиск по второй коллекции для каждого элемента.

Ответ 2

ListA.Where(a => ListX.Any(x => x.b == a.b))

Ответ 3

var commonNumbers = first.Intersect(second); 

Это даст вам общие значения между двумя списками, гораздо более быстрый и более чистый подход, а затем объединение или другие выражения лямбда.

Просто попробуйте.

Источник: MSDN

Ответ 4

Ну все выше не будет работать, если у вас есть несколько параметров, поэтому я думаю, что это лучший способ сделать это.

Например: найдите не соответствующие предметы из домашних животных и домашних животных2.

var notMatchedpets = pets
    .Where(p2 => !pets2
    .Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
    .ToList();