4

こんにちは、私は MVC 4 レポートを作成しており、EF5 を使用しています。データベースは SQL 2005 上にあります。

レポートに大量の長い文字列フィルターが含まれています。多数のフィルターが選択されていると、次のエラーが表示されます:「SQL ステートメントの一部が深くネストされています。クエリを書き直すか、小さなクエリに分割してください。」

フィルターが選択され、リストが返されます。LINQ クエリでは次のように使用します。

DataContext.Entity.Where(list.Contains(column));
return IQueryable<Entity>;

制限を超えたのは LINQ で生成された SQL クエリだと思いますが、制限が何であるかはわかりません。

この制限を制御する方法はありますか? または、私の推測が間違っていたら指摘してください。

どうもありがとう。

@AdrianFaciu が提供する以下のリンクに感謝します。それは本当に役に立ちます。同様の問題だと思います。(各文字列フィルターの長さが長すぎて、それらがたくさんあると思います。) Contains()を使用するときに2100パラメーターの制限(SQL Server)に達する

いくつかの回避策を読みましたが、文字列クエリを生成するのではなく、適切な解決策を探しています。少なくとも今のところ、クエリの長​​さを減らすためにデータを段階的にロードする必要があるようです。

4

2 に答える 2

4

適切な解決策は、SQLを直接使用することです。EFとLinqは、レポートクエリを作成するためのツールではありません。これはORMです。これを使用して、データベースからオブジェクトを処理し、オブジェクトを変更してデータベースに保存します。

データベースからデータをプルしてレポートや複雑な検索エンジンを構築するためだけに複雑なクエリが必要な場合は、ORMの複雑さを渡して、低レベルのSQLに移行する必要があります。クエリまたはパラメータのサイズ制限に達した場合は、本当に必要です。 。これにより、クエリがはるかに単純、小型、高速になり、テーブル値パラメーターなどの高度な機能を使用して、大規模な包含呼び出しを回避できるようになります。

すべてのレポートをSProcsからLinqに変更するのは本当にばかげていました...あなたははるかに悪い解決策を生み出すためにあなたの時間を無駄にしています。

于 2012-12-19T11:41:40.147 に答える