Платформа сущностей, Linq, «Некоторая часть вашего оператора SQL вложена слишком глубоко. Перепишите запрос или разбейте его на более мелкие запросы». - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующий код:

        var branches =Context.HierarchyBranches.Where(x => dataItemIds.Any(y => y == x.DataItemID));
        return await branches.ToListAsync();

С List<int> dataItemIds

и генерирует следующее исключение:

Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

Когда массив dataItemIds больше, чем около 80 элементов, но работает нормально, когда в списке меньше элементов.

Очевидно, что проблема связана с размером списка dataItemIds

У меня вопрос, а как еще можно написать этот запрос?

Я знаю, что могу использовать хранимые процедуры и т. Д., Но есть ли способ сделать это с помощью Linq, Entity и т. Д.?

1 Ответ

0 голосов
/ 01 мая 2018

Я вполне уверен, что если вы замените свой список на массив и воспользуетесь следующим, вы получите лучший ответ:

var branches = Context.HierarchyBranches.Where(x => dataItemIds.Contains(x.DataItemID));

В Linq to SQL «Contains» становится оператором «IN», тогда как «Any» требует предиката и может создавать внутренние операторы SQL.

...