3

次のクラスとオブジェクトがあります

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あるすべてのレコードを取得したいです(すでに埋められていると仮定します):ProdIdfilteredProdIdsfilteredProdIdsIds

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();
4

2 に答える 2

1

filteredProdIdsはリストであるため、内に含めることができるアイテムの数には制限があります。

テストするには、次のように設定できますfilteredProdIds

filteredProdIds = filteredProdIds.Take(1).ToList();
于 2012-03-23T12:09:25.750 に答える
1
var filteredProdIds = FilterIds().ToArray();
var products = ProductRepository.GetAllProducts().Where(p => filteredProdIds.Contains(p.ProdId));
于 2012-03-23T12:12:28.950 に答える