У меня есть ситуация, когда у меня есть список идентификаторов, таких как {1,2,3,4}. Мне нужно передать в метод другой список идентификаторов, и если список имеет одинаковые числа в нем, верните true, иначе, если какой-либо список не идентичен (без учета порядка), мне нужно вернуть false. Таким образом, вызов метода с {1,2,3,4,5} должен возвращать значение false, а вызов с {2,4,1,3} возвращает true. Это звучит достаточно просто, но я не могу понять, как это сделать.Как создать этот запрос linq
ответ
Если вы гарантированно не имеют повторяющиеся элементы в idList
, вы можете использовать следующее:
if (idList.Count == otherIDList.Count &&
idList.Intersect(otherIDList).Count() == idList.Count)
{
// Contain same things.
}
else
{
// Do not contain same things.
}
Первая проверка, чтобы убедиться, что они одинакового размера. Это действительно дешевый способ увидеть, имеют ли списки даже возможность быть идентичными, так же, как со строками. Кроме того, без него утверждение вернет true, если otherIDList
является надмножеством idList
.
Если вы не можете гарантировать уникальность в коллекции, я думаю, вам придется что-то закодировать.
Самый простой способ, вероятно, это:
var idSet = new HashSet<int>(idList1);
if (idSet.SetEquals(idList2))
{
...
}
Согласно комментариям, это будет считать {1, 1, 1, 1, 1} равным {1} - иными словами, рассматривает его как набор, а не неупорядоченный набор возможных дубликатов значений.
Напоминание о том, что LINQ не является серебряной пулей для работы с коллекциями. –
Я бы добавил, что это не сработает, если в списке повторяются элементы. Утверждается, что они являются идентификаторами в вопросе, и поэтому могут предположить, что они не повторяются. Но это не указано явно. – jdmichal
@jdmichal: Правда. Будет обновление, чтобы упомянуть об этом. –
- 1. Этот запрос LINQ неверен?
- 2. Как написать этот запрос linq?
- 3. Как реорганизовать этот запрос LINQ
- 4. как этот запрос linq выполнить
- 5. Как оптимизировать этот запрос linq?
- 6. Как написать этот LINQ запрос
- 7. Как отлаживать этот запрос LINQ
- 8. Как оптимизировать этот LINQ запрос
- 9. Как улучшить этот запрос LINQ?
- 10. Как Linq-ify этот запрос?
- 11. Как оптимизировать этот запрос linq?
- 12. Как создать запрос LINQ
- 13. Оптимизируйте этот запрос LINQ
- 14. Как создать этот запрос с помощью Entity Framework и Linq
- 15. Как создать этот запрос, используя NHibernate QueryOver вместо Linq?
- 16. Создать асинхронный Linq запрос
- 17. Как преобразовать этот запрос в linq
- 18. Как создать этот запрос обновления?
- 19. Как создать этот запрос active_records
- 20. Как создать этот MySQL запрос
- 21. Как правильно создать этот запрос?
- 22. Этот запрос LINQ слишком длинный?
- 23. Что делает этот запрос LINQ?
- 24. Почему этот запрос LINQ компилируется?
- 25. Когда выполняется этот запрос LINQ?
- 26. Как выполнить этот запрос XPath с Linq?
- 27. Как написать этот запрос в LINQ?
- 28. Как улучшить этот запрос LINQ для поиска
- 29. Как поставить этот запрос в Linq (C#)?
- 30. Как написать этот SQL-запрос LINQ?
Спасибо. Я думал о методе пересечения, но я не мог вспомнить, как он называется. Еще раз спасибо! –