2017-06-16 1 views
0

ユーザーがいくつかのパラメータに基づいて結果をフィルタリングできる複雑な要件があります。私は動的クエリを準備するためにEntity Framework SqlQueryを使用しました。私は、データベース・サーバーからすべてのレコードを取得する必要はありませんEntity Framework 6を​​使用してレコードの総数とリストを取得する方法SqlQuery

(同じフィルタを使用してページネーションレコード)のみ25ディスプレイ - フィルタ を適用することで利用できるレコードの合計はありません - だから、アプリケーションでは、私は を表示したいですアプリサーバー。私は25レコードを取得し、同じクエリを使用してフィルタ結果の合計を取得する必要があります。

using (Entities dbEntities = new Entities()) 
       { 
        var resultQuery = dbEntities.AllResources.SqlQuery(searchQuery, parameters.ToArray()); 
        int count = resultQuery.Count(); 
//Here i am getting an error "The SqlParameter is already contained by another SqlParameterCollection." 
        var searchResult = resultQuery.Skip(startRecord).Take(pageSize).ToList(); 
       } 

私が試してみました何:以下

データベースから結果を取得するためのコードです 私はページングレコードを取得するために

//For getting total count 
int totalRecords = 0; 
       using (Entities dbEntities = new Entities()) 
       { 
        var countQuery = dbEntities.AllResources.SqlQuery(searchQuery, parameters.ToArray()); 
        totalRecords = countQuery.Count(); 
       } 

のように別々のクエリに呼ばれている(25 REC)

using (Entities dbEntities = new Entities()) 
       { 
        var resultQuery = dbEntities.AllResources.SqlQuery(searchQuery, parameters.ToArray()); 
        var searchResult = resultQuery.Skip(startRecord).Take(pageSize).ToList(); 
       } 

ただし、まだエラーは解決していません。しかし、私はパラメータをクローンして、そのパラメータをクリアしますが運はありません。

(ストアドプロシージャを使用している場合)あなたがちょうど あなたが取得するために、出力1としてSPに渡しているパラメータのいずれかを定義することができ 再作成SqlParameterインスタンス、またはのいずれかに必要
SqlParameter[] parametersCount = new SqlParameter[parameters.Count]; 
parameters.CopyTo(parametersCount); 
var countQuery = dbEntities.AllResources.SqlQuery(searchQuery, parametersCount.ToArray()); 
+0

私はパラメータがあなたの問題ではないと思います。 'Count'、' Skip'、 'Take'メソッドをホバーすると、' Queryable'ではなく 'Enumerable'メソッドにマップされていることがわかります。つまり、クエリ結果をメモリにマテリアライズした後に*実行されます。 –

答えて

0

ページ番号付きレコードに加えて、合計レコード数がカウントされます。

いくつかのヒントhereがあります(ポストは単純なパラメータ値を使用しますが、SqlParameterオブジェクトも使用できます)。

関連する問題