0

こんにちは、複数の内部結合を持つ単純な選択である SQL 内のストアド プロシージャがあります。このストアド プロシージャを LINQ に変換しました。実行すると、メモリ例外が発生するまでメモリ使用量が増加します。私は間違いなくLINQを初めて使用するので、それが私がやっている方法であることを願っています。以下はLINQコードです

編集: 関数に渡される StockRoomID、CustomerID (整数) StartDate、EndDate (日時) 変数

Dim query = (From prds In context.prds
                Join prd_colour In context.prd_colours On prd_colour.prd_id Equals prds.prd_id
                Join prd_colour_srsp In context.prd_colour_srsps On prd_colour.prd_colour_id Equals prd_colour_srsp.prd_colour_id
                Join prd_br In context.prd_brs On prd_br.prd_colour_id Equals prd_colour.prd_colour_id
                Join prd_stk_rm In context.prd_stk_rms On prd_stk_rm.prd_br_id Equals prd_br.prd_br_id
                Join ct_colour In context.ct_colours On ct_colour.ct_colour_id Equals prd_colour.ct_colour_id
                Join ct_pmg In context.ct_pmgs On ct_pmg.ct_pmg_id Equals prds.ct_pmg_id
                Join ct_pmg_detail In context.ct_pmg_details On ct_pmg_detail.ct_pmg_id Equals ct_pmg.ct_pmg_id
                Join ct_stk_rm In context.ct_stk_rms On ct_stk_rm.ct_br_id Equals ct_pmg_detail.ct_br_id And ct_stk_rm.ct_stk_rm_id Equals prd_stk_rm.ct_stk_rm_id
                Join ct_cust_type In context.ct_cust_types On ct_cust_type.ct_cust_type_id Equals ct_pmg_detail.ct_cust_type_id
                Join ct_cust_br In context.ct_cust_brs On ct_cust_br.ct_cust_type_id Equals ct_cust_type.ct_cust_type_id
                Where prds.prd_invisible_yn = 0 And prds.sell_yn = 1 And prds.ct_apg_id = 3 And ct_stk_rm.ct_stk_rm_id = StockRoomID And _
                ct_cust_br.ct_cust_id = CustomerID And prd_colour_srsp.srsp_date_beg <= StartDate And prd_colour_srsp.srsp_date_end >= EndDate Or _
                prd_colour_srsp.srsp_date_end Is Nothing And ct_pmg_detail.pmg_date_beg <= StartDate And ct_pmg_detail.pmg_date_end >= EndDate Or _
                ct_pmg_detail.pmg_date_end Is Nothing
                Select New prd_colour_mix With {.pid = prd_colour.prd_colour_id, .prdcode = prds.prd_sbcode & "-" & ct_colour.ct_colour_code, .prddesc = prds.prd_desc & "-" & ct_colour.ct_colour_desc, .prdLegacyCode = prd_colour.prd_legacy_code}).ToList

このクエリは約 7,000 件のレコードを返します。ストアド プロシージャの実行には約 500 ミリ秒かかります。

ありがとう

4

1 に答える 1

1

ほとんどの場合、サーバー側で実行したいことをクライアント側で実行しています。

LINQPad (無料)をダウンロードして起動し、データソースへの接続を追加し、追加したデータソースをクエリのアクティブなデータソースとして選択し、言語を「VBステートメント」に設定して実行します。結果出力ウィンドウで[SQL]タブを選択し、SQLを調べます。次に、サーバー側で処理される式の部分を確認します。

于 2012-08-02T07:32:11.720 に答える