Это, вероятно, частый вопрос, и я искал другой вопрос, но не нашел работающего решения (обратите внимание, мои навыки в C # и linq ограничены - поэтому простое решение будет оценено!).
Вот проблема :
У меня есть 2 списка с объектами. Я хочу сравнить их и вернуть все НОВЫЕ объекты в list2.
Пример:
ObjectList List1; // содержит 3 объекта, которые хранятся в базе данных
ObjectList List2; // содержит те же 3 объекта, что и в List1, и новый объект, который был добавлен с веб-страницы (родительский объект был обновлен на веб-странице)
ObjectList List3; // должен сделать сравнение List1 и List2, и вернуть НОВЫЕ объекты в List2 (так что результатом должен быть только объект с номером 4)
Примечание:
Спасибо за любые предложения или ссылки на ранее вопросы, которые я пропустил в моем поиске
Изменить
Вот небольшой пример первой попытки с 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)));