Подтвердить что ты не робот

Найти, если listA содержит любые элементы, не входящие в списокB

У меня есть два списка:

List<int> listA     
List<int> listB

Как проверить использование LINQ, если в listA существует элемент wchich deosn't существует в listB? Я могу использовать цикл foreach, но мне интересно, могу ли я сделать это с помощью LINQ

4b9b3361

Ответ 1

listA.Except(listB) предоставит вам все элементы в списке A, которые не находятся в спискеB

Ответ 2

if (listA.Except(listB).Any())

Ответ 3

listA.Any(_ => listB.Contains(_))

:)

Ответ 4

Вы можете сделать это в одной строке

var res = listA.Where(n => !listB.Contains(n));

Это не самый быстрый способ сделать это: в случае, если listB относительно длинный, это должно быть быстрее:

var setB = new HashSet(listB);
var res = listA.Where(n => !setB.Contains(n));

Ответ 5

В списке есть метод Содержит, возвращающий bool. Мы можем использовать этот метод в запросе.

List<int> listA = new List<int>();
List<int> listB = new List<int>();
listA.AddRange(new int[] { 1,2,3,4,5 });
listB.AddRange(new int[] { 3,5,6,7,8 });

var v = from x in listA
        where !listB.Contains(x)
        select x;

foreach (int i in v)
    Console.WriteLine(i);

Ответ 6

Этот фрагмент кода сравнивает два списка, в которых содержится поле для типа CultureCode, такого как en-GB. Это оставит в списке не существующие переводы. (нам нужен выпадающий список для непереводимых языков для статей)

var compared = supportedLanguages.Where(sl => !existingTranslations.Any(fmt => fmt.CultureCode == sl.Culture)).ToList();

Ответ 7

Получите разницу двух списков, используя Any(). Функция Linq Any() возвращает логическое значение, если условие выполнено, но вы можете использовать его для возврата разницы двух списков:

var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();