2016-07-15 7 views
0

ページング、並べ替え、フィルタリングを適用してもEntity Framework(EF)でストアドプロシージャを実行するとすべてのレコードが返されます。ページング、ソート、フィルタリングを適用してもEntity Framework(EF)ですべてのレコードを返すストアドプロシージャの実行

以下はコードです。

var result = base.Context.proc_App_Contracts_All(Customer_No).AsQueryable() 
       .Where(filterExpression == null ? e => e.Contract_Number == e.Contract_Number : filterExpression) 
       .OrderBy(sortExpression) 
       .Skip((request.Page - 1) * request.PageSize) 
       .Take(request.PageSize) 
       .ToList()); 

私はEFは、アプリケーションにすべてのレコードをフェッチして、など

ソートやフィルタリングを適用する理由です、データベースレベルで(ストアドプロシージャの場合)その理由は、アプリケーションレベルでのEFフィルタリングレコードではないと思います

ここでは、ストアドプロシージャを同じ方法で実行する方法があることを知りたいのですが、EFのテーブルやビューにクエリを実行してクエリのラッパーを最終的に作成するようにしたり、ストアドプロシージャをSQLビュー。事前

+0

ストアドプロシージャは再利用されません** IQueryable **はあなたのproc_Contracts_All plsを記述し、DbContextでどのように設定しましたか? –

答えて

0

おかげで、SQL Serverの別のバージョンのサーバー側のページ付けを行うための次の記事を参照してください。 SQL Server 2012のOFFSET FETCH句は、パフォーマンス面で最適です。もう一度、使用しているバージョンによって異なります。追加のSPパラメータを追加し、クエリを変更してサーバー側のフィルタリングを行うこともできます。これは、あなたの質問に答える https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx

希望:

https://www.mssqltips.com/sqlservertip/2696/comparing-performance-for-different-sql-server-paging-methods/

MSDNのリンクには、句をFETCH OFFSET。

関連する問題