попробуйте что-то вроде этого
List<String> stringlistone = new List<string>() { "Hello", "Hi" };
List<String> stringlisttwo = new List<string>() { "Hi", "Bye" };
IEnumerable<String> distinctList = stringlistone.Concat(stringlisttwo).Distinct(StringComparer.OrdinalIgnoreCase);
List<List<String>> listofstringlist = new List<List<String>>() { stringlistone, stringlisttwo };
IEnumerable<String> distinctlistofstringlist = listofstringlist.SelectMany(x => x).Distinct(StringComparer.OrdinalIgnoreCase);
это зависит от того, как вы присоединяетесь к спискам, но должно дать вам представление, добавил порядковый регистр игнорирования на тот случай, если вы хотите, чтобы список предназначений рассматривал «hi» и «Hi» как одно и то же
Вы также можете просто назвать отличное, так что если вы сделали
List<String> stringlistone = new List<string>() { "Hi", "Hello", "Hi" };
stringlistone = stringlistone.Distinct(StringComparer.OrdinalIgnoreCase);
stringlistone будет список с stringlistone[0] == "Hi"
и stringlistone[1] == "Hello"