Определите, какие элементы в списке НЕ находятся в другом списке
У меня два IList<CustomObject>
, где CustomObject
имеет Name
свойство это string
, Позвони первому set
и второй subset
, set
содержит список вещей, которые я только что показал пользователю в окне списка с несколькими выборками. Те, которые выбрал пользователь, были помещены в subset
(так subset
гарантированно будет подмножеством set
отсюда и умные имена;))
Какой самый простой способ создать третий IList<CustomObject>
, inverseSubset
, содержащий все пользовательские объекты, которые пользователь не выбирал из этих двух наборов?
Я пробовал LINQ такие вещи
IEnumerable<CustomObject> inverseSubset = set.Select<CustomObject,CustomObject>(
sp => !subset.ConvertAll<string>(p => p.Name).Contains(sp.Name));
... основанный на ответах на смутно похожие вопросы, но пока ничего не компилируется, а тем более не работает:P
2 ответа
Используйте LINQ Except
за это:
Создает разницу между двумя последовательностями.
Ага, слишком много SQL в последнее время - я не хотел Select
, Я хотел Where
:
List<string> subsetNames = subset.ConvertAll<string>(p => p.Name);
IEnumerable<CustomObject> inverseSubset =
set.Where<CustomObject>(p => !subsetNames.Contains(p.Name));