次のクラスとオブジェクトがあります
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 ステートメントの一部のネストが深すぎます。クエリを書き直すか、小さなクエリに分割します。
メソッドを同等のデータベースビューに置き換えることにより、LINQPadでクエリを検証しようとしましたが、機能します。GetAllProducts()
この例外の原因は何ですか?
アップデート
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();