Поскольку метод IEnumerable.Contains()
не принимает предикат в качестве аргумента, большинство людей используют следующий код для проверки существования чего-либо, соответствующего условию:
// ProductId is unique.
if (Products.Count(c => c.ProductId = 1234) == 1)
{
// Products list contains product 1234.
}
Этот код заставляет проходить через каждый продукт и проверять, соответствует ли он. Это действительно не нужно.
При просмотре сгенерированного кода SQL Linq-to-SQL возникает та же проблема. Отправляется оператор select count(*) ... where ProductId = @p0
вместо if exists
.
Как с помощью Linq определить, содержит ли набор элемент, соответствующий условию, без необходимости проходить через каждый элемент в наборе и подсчитывать количество совпадений?