У меня есть следующий класс и объектыLINQ бросать запрос вложенных слишком глубоко исключений
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)));
Whn я запускаю мое приложение, оно бросает исключение
Некоторая часть вашего оператора SQL вложен слишком глубоко. Перепишите запрос или разделите его на более мелкие запросы.
Я пытался проверить запрос с LINQPad, заменив метод GetAllProducts()
с эквивалентным зрения базы данных, и она работает.
Что может быть причиной этого исключения?
UPDATE
filteredProductIds заполняется этим методом:
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();
Может быть, это может прояснить проблему: http://blog.hompus.nl/2010/08/26/joining-an-iqueryable- с-an-ienumerable/ – ilmatte