Это действительно все списки одного типа? Или у вас есть
List<A> a1 = new List<A>();
List<B> a2 = new List<B>();
List<C> a3 = new List<C>();
List<D> a4 = new List<D>();
и вы хотите объединить их, потому что все 4 типа имеют общее свойство идентификатора строки?
ОК, ваши изменения показывают, что я был на правильном пути. Вам необходим интерфейс, который определяет свойство строкового идентификатора, и каждый тип A, B, C и D должен реализовывать этот интерфейс.
Тогда каждый список будет иметь тип интерфейса, и будут работать конкретные ответы.
Если у вас нет возможности определить интерфейс, вы можете использовать LINQ для запроса каждого списка только для поля Id (вы должны получить IQueryable<String>
результаты) и затем объединить эти результаты.
Edit: вот запрос LINQ, который должен дать вам то, что вы ищете:
var uniqueIds = (from a in a1
select a.Id).Concat(
from b in a2
select b.Id).Concat(
from c in a3
select c.Id).Concat(
from d in a4
select d.Id).Distinct();