У меня такой код:
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 и т. д.?
Я почти уверен, что если вы замените свой список массивом и воспользуетесь следующим, вы получите лучший ответ:
var branches = Context.HierarchyBranches.Where(x => dataItemIds.Contains(x.DataItemID));
В Linq to SQL 'Contains' становится оператором 'IN', тогда как 'Any' требует предопределения и может создавать внутренние операторы SQL.