В Linq, как найти, если набор содержит элемент без использования Count (предикат)? - PullRequest
2 голосов
/ 19 июля 2010

Поскольку метод 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 определить, содержит ли набор элемент, соответствующий условию, без необходимости проходить через каждый элемент в наборе и подсчитывать количество совпадений?

Ответы [ 2 ]

14 голосов
/ 19 июля 2010

Вы можете попробовать

if (Products.Any(c => c.ProductId = 1234))
{
//do stuff
}

Не уверен, что он использует if, но вы можете попробовать посмотреть, что отправлено.

1 голос
/ 28 января 2014

Если вы пытаетесь проверить условие, вы можете использовать следующий код

if(Products.Any(p => p.ProductID == 1234))
{
    //do sth
}

, но если вы хотите проверить, существуют ли строки без каких-либо условий, таких как p.ProductID == 1234, вам следуетследующий

if(Products.Any(p => p != null))
{
//do sth
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...