4

私は dapper を使用して、ストアド プロシージャからオブジェクト リストに結果セットを取得し、json としてクライアントに返します。

public IHttpActionResult Test()
    {
        List<ProductPreview> gridLines;
        var cs = ConfigurationManager.ConnectionStrings["eordConnection"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(cs))
        {
            gridLines = conn.Query<ProductPreview>("dbo.myStoredProcedure", new { userID = 1 },
             commandType: CommandType.StoredProcedure).ToList();
        }
        var totalCount = gridLines[0].MaxCount;//I need to know total count
        ....
        return Ok(gridLines);
    }

できます。タイプ ProductPreview のオブジェクトの最後のプロパティは TotalCount です。これは、ストアド プロシージャがすべての行の列として合計数を返すためです。(2番目のオプションは、ストアドプロシージャが2つのレコードセットを返すことですが、2つのレコードセットで動作するようにdapperを変更する方法がわかりません). 2 つの個別のクエリを使用することはできません。

(オーバーヘッドであるため) totalCount プロパティなしで gridLines json オブジェクトをクライアントに返し、ストアド プロシージャからいくつかの変数に合計カウントを読み取る最良の方法は何でしょうか? totalCount プロパティを使用せずに gridLines オブジェクトを他のオブジェクトにコピーすることも、不要なオーバーヘッドになります。

4

3 に答える 3

4

Dapperを使用すると、1 つのクエリで複数の結果グリッドを処理できます。

例:

var sql = 
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var customer = multi.Read<Customer>().Single();
   var orders = multi.Read<Order>().ToList();
   var returns = multi.Read<Return>().ToList();
   ...
} 
于 2016-03-29T16:05:34.250 に答える
3

要件は と を取得することであるため、この問題に別の方法でアプローチすることもできますがResult setcountそれQueryMultipleは に使用する方が適切multiple result setsです。この場合、 を使用することを計画できDynamic Parametersます。を使用してデフォルトで行ったようOutputParameterに、を実行すると、タイプ の結果セットを受け取るのに役立ちます。コードを使用して、下に示すように、出力パラメーター値を取得してカウントを取得できます。InputParameterAnonymous typeconn.Query<ProductPreview>IEnumerable<ProductPreview>

public IHttpActionResult Test()
    {
        List<ProductPreview> gridLines;
        var cs = ConfigurationManager.ConnectionStrings["eordConnection"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(cs))
        {
            DynamicParameters dynamicParameters = new DynamicParameters();

            dynamicParameters.Add("UserID",1,ParameterDirection.Input);

            // Fill the Count in this Parameter
            dynamicParameters.Add("Count",0,ParameterDirection.Output); 

            gridLines = conn.Query<ProductPreview>("dbo.myStoredProcedure", dynamicParameters,
             commandType: CommandType.StoredProcedure).ToList();

             var totalCount = dynamicParameters.Get<int>("Count");
        }

        ....
        return Ok(gridLines);
    }
于 2016-03-30T07:53:35.380 に答える