委托和匿名委托

只讲实例:

委托的目的就是提高代码的内聚降低耦合度

    /// <summary>
        /// 获取json格式
        /// </summary>
        /// <returns></returns>

 public JsonResult getActionJson()
        {
            JsonResult json = new JsonResult();
            string Str_info=Request["Str_info"].ToString();//所有的信息字段
            List<dynamic> list = new List<dynamic>();//获取list
            getActionList glist = _getList_ZXSearch;
           list= _getActionList(Str_info, glist);
           json.Data = list;
           json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
           return json;
        }

     /// <summary>
        /// 声明获取list列表
        /// </summary>
        /// <param name="_Code"></param>
        /// <param name="Str_info"></param>
        /// <returns></returns>

  public  delegate List<dynamic> getActionList(string Str_info);

 

  public List<dynamic> _getActionList( string Str_info, getActionList list) {
           return  list.Invoke(Str_info);
        } 

 

 /// <summary>
        /// 装箱查询
        /// </summary>
        /// <param name="_Code">获取字段的值</param>
        /// <param name="Str_info">所有的信息字段</param>
        /// <returns></returns>
        public List<dynamic> _getList_ZXSearch(string Str_info)
        {
            DataTable dt = null;
            string sql = " select a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a inner join  (select ProjSys from ProjDetail  where ProjPact='" + Str_info.Split(',')[0] + "' or ProjPact0='" + Str_info.Split(',')[0] + "') b on a.ProjSys=b.ProjSys  ";
            dt = getDt(sql);
            List<dynamic> list = new List<dynamic>();
            foreach (DataRow dr in dt.Rows)
            {
                list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 = dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
            }
            return list;

        }

 

 

 /// <summary>
        /// 获取table
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public DataTable getDt(string sql)
        {
            DataTable dt = null;
            try
            {
               dt= FXSmart.KST.DAL.SqlHelper.GetDS(sql).Tables[0];
            }
            catch (Exception ex) {
                throw ex;
            }
            return dt;
        }

顾名思义,这个方法就是定义一个方法,把方法当参数传进去然后指向特定的方法。

 

 

下面是匿名委托,相同的代码进行改造。这里稍微有点改动。

   /// <summary>
        /// 获取json格式
        /// </summary>
        /// <returns></returns>

 public JsonResult getActionJson()
        {
            JsonResult json = new JsonResult();
            string Str_info=Request["Str_info"].ToString();//所有的信息字段
            List<dynamic> list = new List<dynamic>();//获取list
          list=   getActionList glist=new getActionList(string Str_info) {

       DataTable dt = null;
            string sql = " select a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a inner join  (select ProjSys from ProjDetail  where ProjPact='" + Str_info.Split(',')[0] + "' or ProjPact0='" + Str_info.Split(',')[0] + "') b on a.ProjSys=b.ProjSys  ";
            dt = getDt(sql);
            List<dynamic> list = new List<dynamic>();
            foreach (DataRow dr in dt.Rows)
            {
                list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 = dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
            }
            return list;

}
      
           json.Data = list;
           json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
           return json;
        }

 public  delegate List<dynamic> getActionList(string Str_info);

 

这里已经简单了一些,下面更加的简化:

/// <summary>
        /// 获取json格式
        /// </summary>
        /// <returns></returns>

 public JsonResult getActionJson()
        {
            JsonResult json = new JsonResult();
            string Str_info=Request["Str_info"].ToString();//所有的信息字段
            List<dynamic> list = new List<dynamic>();//获取list
          list=   getActionList glist=>(string Str_info) {

       DataTable dt = null;
            string sql = " select a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a inner join  (select ProjSys from ProjDetail  where ProjPact='" + Str_info.Split(',')[0] + "' or ProjPact0='" + Str_info.Split(',')[0] + "') b on a.ProjSys=b.ProjSys  ";
            dt = getDt(sql);
            List<dynamic> list = new List<dynamic>();
            foreach (DataRow dr in dt.Rows)
            {
                list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 = dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
            }
            return list;

}
      
           json.Data = list;
           json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
           return json;
        }

 public  delegate List<dynamic> getActionList(string Str_info);

 

posted @ 2017-01-13 16:34  小西门吹吹雪  阅读(226)  评论(0编辑  收藏  举报