LINQ для удаления элементов из одной коллекции, которые не соответствуют элементам в другой коллекции на основе поля - PullRequest
1 голос
/ 26 сентября 2011

У меня есть 2 Списка различных объектов, например, Список и Список.Я хочу удалить все объекты в первом списке, чье значение поля не соответствует значению поля во втором списке.
Например, я хочу удалить все объекты Type1 из первого списка, чье Type1.name (строка) элемент не соответствует элементу Type2.id (строка) во втором списке.
Возможно ли это с LINQ?

Ответы [ 2 ]

5 голосов
/ 26 сентября 2011

LINQ - это не изменение существующих коллекций, а выполнение запросов. Если вам нужно изменить список на месте, вы можете захотеть что-то вроде:

HashSet<string> ids = new HashSet<string>(list2.Select(x => x.Id));
list1.RemoveAll(x => !ids.Contains(x.Name));

В «нормальном» LINQ вы можете сделать это с помощью:

// I'm assuming no duplicate IDs in list2 
var query = (from x in list1
             join y in list2 on x.Name equals y.Id
             select x).ToList();
0 голосов
/ 26 сентября 2011

Вы также можете использовать лямбду:

var query = (list1.Join(list2, x => x.Name, y => y.Id, (x, y) => x)).ToList();

или

var query = (Enumerable.Join(list1, list2, x => x.Name, y => y.Id, (x, y) => x)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...