Определите, какие элементы в списке НЕ находятся в другом списке

У меня два 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));
Другие вопросы по тегам