У меня есть следующий класс и объекты
Product{int ProdId{get; set;}, string ProdDesc{get; set;}}
IQueryable<Product> products = ProductRepository.GetAllProducts();
List<int> filteredProdIds = new List<int>();
Метод GetAllProducts()
выполняет пару соединений над некоторыми EF-классами и возвращает объект IQueryable<Product>
.Я уже проверил, возвращает ли он ожидаемые значения, и он это делает.
С products
Я хочу получить все записи, у которых есть ProdId
в filteredProdIds
(предположим, что filteredProdIds
уже былозаполнено Ids
):
products = products.Where(p => filteredProdIds.Any(fp => fp.Equals(p.ProdId)));
Когда я запускаю свое приложение, оно выдает исключение
Некоторая часть вашего оператора SQL вложена слишком глубоко.Перепишите запрос или разбейте его на более мелкие запросы.
Я попытался проверить запрос с помощью LINQPad , заменив метод GetAllProducts()
эквивалентным представлением базы данных ., и это работает.
Что может быть причиной этого исключения?
ОБНОВЛЕНИЕ
FilterProductIds заполняется этим методом:
IEnumerable<int> filteredProductIds = products.Select(p => p.partId).Distinct().ToList();
Я нашел способ избежать этого исключения, но должно быть намного более чистое решение:
foreach (var filteredProdId in filteredProdIds)
{
product.Union(product.Where(p => p.ProdId.Equals(filteredProdId)));
}
product.Distinct();