Лучший способ сравнить два больших строковых списка, используя С# и LINQ?

У меня есть большой список (~ 110 000 строк), который мне нужно сравнить с похожим размером.

Список A поступает из одной системы. Список B поступает из таблицы SQL (я могу читать, не хранить procs и т.д.)

Каков наилучший способ найти значения в списке A, которые больше не существуют в списке B?

Сколько 100 000 строк обрабатывается в массиве?

спасибо

Ответы

Ответ 1

Итак, у вас есть два списка:

List<string> listA;
List<string> listB;

Затем используйте Enumerable.Except:

List<string> except = listA.Except(listB).ToList();

Обратите внимание, что если вы хотите, скажем, игнорировать случай:

List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList();

Вы можете заменить последний параметр IEqualityComparer<string> по вашему выбору.

Ответ 2

С LINQ:

var missing = listA.Except(listB).ToList();

Ответ 3

Из интереса вы можете использовать List<string>? Поскольку в .net 3.5 SP1 вы можете использовать HashSet, а ExceptWith. Насколько я понимаю, HashSets специально оптимизированы для сравнения между двумя наборами.

Ответ 4

List<string> A = //get from file
List<string> B = //get from db

var C = A.Except(B);

Ответ 5

Устранив этот вопрос, похоже, вы могли бы использовать метод Except<T>().