C # Сравнить два списка, вернуть новые элементы в списке 2

Это, вероятно, частый вопрос, и я искал другой вопрос, но не нашел работающего решения (обратите внимание, мои навыки в C # и linq ограничены - поэтому простое решение будет оценено!).

Вот проблема :

У меня есть 2 списка с объектами. Я хочу сравнить их и вернуть все НОВЫЕ объекты в list2.

Пример:

ObjectList List1; // содержит 3 объекта, которые хранятся в базе данных

ObjectList List2; // содержит те же 3 объекта, что и в List1, и новый объект, который был добавлен с веб-страницы (родительский объект был обновлен на веб-странице)

ObjectList List3; // должен сделать сравнение List1 и List2, и вернуть НОВЫЕ объекты в List2 (так что результатом должен быть только объект с номером 4)

Примечание:

  • Порядок не имеет значения. Мне нужны только новые объекты
  • Обычно объекты добавляются только в List2. ЕСЛИ какой-либо объект удален (сравните с List1), это следует игнорировать. (так что объект, который существует только в List1, не представляет интереса)

Спасибо за любые предложения или ссылки на ранее вопросы, которые я пропустил в моем поиске

Изменить

Вот небольшой пример первой попытки с Except (это вернуло ошибка)

Я его немного сократил. Метод взят из нашего программного обеспечения, поэтому они, вероятно, вам не известны. Извините за это.

 // caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);

// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);

// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);

Решение, которое сработало ЕСЛИ какой-либо объект удален (сравните с List1), это следует игнорировать. (так что объект, который существует только в List1, не представляет интереса)

Спасибо за любые предложения или ссылки на ранее вопросы, которые я пропустил в моем поиске

Изменить

Вот небольшой пример первой попытки с Except (это вернуло ошибка)

Я его немного сократил. Метод взят из нашего программного обеспечения, поэтому они, вероятно, вам не известны. Извините за это.

 // caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);

// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);

// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);

Решение, которое сработало ЕСЛИ какой-либо объект удален (сравните с List1), это следует игнорировать. (так что объект, который существует только в List1, не представляет интереса)

Спасибо за любые предложения или ссылки на ранее вопросы, которые я пропустил в моем поиске

Edit

Вот небольшой пример первой попытки с Except (это вернуло ошибка)

Я его немного сократил. Метод взят из нашего программного обеспечения, поэтому они, вероятно, вам не известны. Извините за это.

 // caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);

// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);

// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);

Решение, которое сработало так что они, вероятно, не знают вам. Извините за это.

 // caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);

// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);

// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);

Решение, которое сработало так что они, вероятно, не знают вам. Извините за это.

 // caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);

// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);

// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);

Решение, которое сработало Исключение не сработало, поскольку список является просто ссылкой (а не значением). Можно использовать второй параметр, но я получил код linq, который работал:

RepositoryObjectList caNewCA = 
    new RepositoryObjectList(caDialogObjects.Where(item1 => 
         !caObjectObjects.Any(item2 => item1.Id == item2.Id)));
6
задан Daniel Hilgarth 5 May 2011 в 13:38
поделиться