Почему я получаю ошибку, вложенную слишком глубоко для этого SQL-запроса linq? - PullRequest
0 голосов
/ 06 сентября 2018
// Note serialNumbers is a List<string 
var ids = (from i in DB.InventoryItems
           join s in serialNumbers on i.SerialNumber equals s
           select i.id);
return string.Join(",", ids);

Переменная serialNumbers представляет собой список строк типа. Я получаю сообщение об ошибке после того, как в этот serialNumbers список

включено около 100 наименований

1 Ответ

0 голосов
/ 06 сентября 2018

Если serialNumbers - это локальный список, это не сработает, если DB.InventoryItems - это запрашиваемая таблица базы данных. Вы не можете объединить таблицы базы данных с локальными коллекциями. Тебе не следует так писать.

Вы должны написать это как:

var ids =
    from i in DB.InventoryItems
    where serialNumbers.Contains(i.SerialNumber)
    select i.id;

Если вы получаете эту ошибку о слишком большом количестве элементов, это ограничение вашей базы данных, поэтому вам придется разбить этот запрос на более мелкие части, если вы хотите использовать этот список номеров. В противном случае вам придется съесть расходы на локальную фильтрацию в традиционном цикле foreach или привести к IEnumerable.

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