Я думаю, что я получил то, что вы хотите - вы хотите, чтобы не выдавать ни одного идентификатора дважды. Таким образом, если в поле «родитель» используется какой-либо «родитель», то в этом случае вы не хотите использовать его дополнительно?
в этом случае вы можете сделать это:
var result = List1.Where(x => !List2.Any(l2 => l2.parentId == x.id)).Union(List2);//.ToList();
Часть Где исключает все элементы, которые используются в качестве родителей в List2. И, с Union (исключая дубликаты), он объединяет List2. ToList () может быть необязательным, в зависимости от того, что вы будете делать с ним дальше.
РЕДАКТИРОВАТЬ: изменена форма Concat на Union.
Одна вещь, которую Вы могли сделать, состоит в том, чтобы иметь отдельный файл настроек только для Вашей библиотеки, затем у Вас только должна быть ссылка на него в Вашем файле конфигурации приложений записи.
См. принятый ответ в этом вопросе для получения информации об этом.
Я знаю, что это не то, что Вы хотите услышать, но файл конфигурации точки входа является логическим местом для помещения этих настроек. Если бы каждая библиотека потребовала своего собственного файла конфигурации затем, то это стало бы утомительным для редактирования каждого файла вместо всего один.
У меня был бы текстовый файл с настройками по умолчанию включенным как часть Вашей библиотеки (и как часть проекта), который может быть распределен с библиотекой для конфигурации настроек по умолчанию (это может быть скопировано и вставлено в файл конфигурации).
Имейте каждую библиотеку классов, определяют параметры конфигурации в пользовательском ConfigurationSection.
Затем добавьте пользовательские обработчики разделов к своему process.exe.config файлу.
Эта статья MSDN является довольно всесторонней в своем объяснении с примерами и в VB и в C#.
Это включает написание некоторого довольно повторяющегося кода - Dmitryr создал этот инструмент для генерации разделов конфигурации от фрагмента конфигурации XML, которая могла бы помочь.