我有以下类和对象
Product{int ProdId{get; set;}, string ProdDesc{get; set;}}
IQueryable<Product> products = ProductRepository.GetAllProducts();
List<int> filteredProdIds = new List<int>();
该方法对一些EF 类GetAllProducts()
执行几个连接并返回一个对象。我已经测试过它是否会返回预期值并且确实如此。IQueryable<Product>
从products
我想获取所有包含它们的记录ProdId
(filteredProdIds
假设filteredProdIds
已经被填充Ids
):
products = products.Where(p => filteredProdIds.Any(fp => fp.Equals(p.ProdId)));
当我启动我的应用程序时,它会引发异常
您的 SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询。
我尝试使用LINQPadGetAllProducts()
验证查询,方法是用等效的数据库视图替换该方法,并且它可以工作。
此异常的原因可能是什么?
更新
filtersProductIds 由这个方法填充:
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();