Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理

硬SQL造成每次解析成本,参数化可以服用执行计划:

        private ENCOUNTERRECEIVINGINFO_LITE GetReceivePhoneAddress(int flag, int placerGroupId)
        {
            List<ENCOUNTERRECEIVINGINFO_LITE> oprnItems = new List<ENCOUNTERRECEIVINGINFO_LITE>();
            string sql;
            if (flag == 0)
                sql = " SELECT A.ENCOUNTERRECEIVINGINFOID, A.ENCOUNTERID, A.PHONE, A.ADDRESSLINE, A.LASTMODIFIEDON "
                    + "\r\n FROM PRPA.ENCOUNTERRECEIVINGINFO A, POOR.ORDERPRESCRIPTION B, POOR.PLACERGROUP C WHERE A.ENCOUNTERRECEIVINGINFOID = B.RECEIVINGINFOID AND B.PLACERGROUPID = C.PLACERGROUPID AND A.ISDELETED = 0 AND C.PLACERGROUPID = :PID ORDER BY A.LASTMODIFIEDON DESC ";
            else
                sql = " SELECT A.ENCOUNTERRECEIVINGINFOID, A.ENCOUNTERID, A.PHONE, A.ADDRESSLINE, A.LASTMODIFIEDON "
                    + "\r\n FROM PRPA.ENCOUNTERRECEIVINGINFO A, POOR.ORDERREQUEST B WHERE A.ENCOUNTERRECEIVINGINFOID = B.RECEIVINGINFOID AND A.ISDELETED = 0 AND (B.PARENTID = :PID OR B.ORDERREQUESTID = :PID) ORDER BY A.LASTMODIFIEDON DESC ";

            using (ServerContext sc = WcfServiceHelper.CreateServerContext(ClientContext.Instance))
            {
                using (DbConnection cn = sc.CreateConnection(Dbs.IP, false))
                {
                    cn.Open();
                    oprnItems = DapperHelper.Query<ENCOUNTERRECEIVINGINFO_LITE>(cn, sql, new { PID = placerGroupId }).ToList();
                }
            }
            return oprnItems.FirstOrDefault();
        }

 

posted on 2025-04-18 15:12  Chr☆s  阅读(19)  评论(0)    收藏  举报