Как выбрать значения в списке, которых нет в таблице, используя EF Core? - PullRequest
0 голосов
/ 07 ноября 2018

У меня довольно большой список строк (30k +), и мне нужно проверить, какие из них не существуют в таблице, используя Entity Framework Core.

Примерно так, но без отправки запроса на проверку каждого элемента:

var notFoundItems = hugeList.Where(c => !tableToCheck.Any(x => x.Id == c)).ToList();

Я нашел ответ, но использовал T-SQL

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы можете сделать выборку, которая ищет все строки, которые существуют в таблице, и помещает их в список. После того, как вы проверите, какие строки не существует.

Пример:

var foundItems = tableToCheck
                .Where(x => hugeList.Contains(x.id))
                .Select(x => x.id)
                .Distinct()
                .ToList();

var notFoundItems = hugeList.Where(c => !foundItems.Any(x => x == c)).ToList();

Таким образом, вы делаете только один запрос к БД.

0 голосов
/ 07 ноября 2018

Поскольку у вас уже есть решение T-SQL, это хороший вариант для использования Raw SQL Query . Конечно, будут случаи, когда SQL-запрос не может быть выражен в LINQ или оператор LINQ не генерирует оптимизированный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...