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

这个查询应该返回大约 7k 条记录,存储过程大约需要 500ms 来执行

谢谢

4

1 回答 1

1

很可能它正在客户端执行您希望它在服务器端执行的操作。

下载LINQPad(免费),启动它并添加与数据源的连接,选择添加的数据源作为查询的活动数据源,将语言设置为“VB 语句”,然后运行它。在结果输出窗口中选择“SQL”选项卡并检查 SQL。然后您将看到在服务器端处理的表达式的哪些部分。

于 2012-08-02T07:32:11.720 回答