Ответ 1
listA.Except(listB)
предоставит вам все элементы в списке A, которые не находятся в спискеB
У меня есть два списка:
List<int> listA
List<int> listB
Как проверить использование LINQ, если в listA
существует элемент wchich deosn't существует в listB
? Я могу использовать цикл foreach
, но мне интересно, могу ли я сделать это с помощью LINQ
listA.Except(listB)
предоставит вам все элементы в списке A, которые не находятся в спискеB
if (listA.Except(listB).Any())
listA.Any(_ => listB.Contains(_))
:)
Вы можете сделать это в одной строке
var res = listA.Where(n => !listB.Contains(n));
Это не самый быстрый способ сделать это: в случае, если listB
относительно длинный, это должно быть быстрее:
var setB = new HashSet(listB);
var res = listA.Where(n => !setB.Contains(n));
В списке есть метод Содержит, возвращающий 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);
Этот фрагмент кода сравнивает два списка, в которых содержится поле для типа CultureCode, такого как en-GB. Это оставит в списке не существующие переводы. (нам нужен выпадающий список для непереводимых языков для статей)
var compared = supportedLanguages.Where(sl => !existingTranslations.Any(fmt => fmt.CultureCode == sl.Culture)).ToList();
Получите разницу двух списков, используя Any(). Функция Linq Any()
возвращает логическое значение, если условие выполнено, но вы можете использовать его для возврата разницы двух списков:
var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();