我有下面的類和對象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- with-an-enumerable/ – ilmatte 2012-07-05 07:30:12