/// <summary>
        /// 有条件的分页获取
        /// T的作用有2:1默认用T的名称做TbName,2dapper返回类型的指定
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TFilter"></typeparam>
        /// <param name="cnn"></param>
        /// <param name="paging"></param>
        /// <param name="filter"></param>
        /// <param name="tbName"></param>
        /// <param name="keyFields"></param>
        /// <param name="orderStr"></param>
        /// <param name="orderType"></param>
        /// <returns></returns>
        async public static Task <PagingResult <T> > GetPagingListSpAsync <T, TFilter>(
            this IDbConnection cnn,
            Paging paging    = null,
            TFilter filter   = null,
            string tbName    = null,
            string keyFields = null,
            string orderStr  = "",
            bool?orderType   = null) where TFilter : class
        {
            if (paging == null)
            {
                paging = new Paging();
            }
            var result = await cnn.QueryMultipleSpAsync(new sp_GetPagingList
            {
                tbName    = tbName ?? typeof(T).Name,
                strWhere  = filter == null ? "" : SqlWhereMapper.toWhere <TFilter>(filter),
                keyFields = keyFields ?? PredefindedKeyFields,
                PageSize  = paging.Size,
                PageIndex = paging.Index,
                OrderType = orderType ?? paging.OrderType,
                OrderStr  = orderStr,
                tbFields  = "*"
            });

            var total = result.Read <int>().FirstOrDefault();
            var list  = result.Read <T>();

            return(new PagingResult <T> {
                Total = total, List = list
            });
        }
 /// <summary>
 /// sp_GetList,带搜索条件的
 /// T的作用有2:1默认用T的名称做TbName,2dapper返回类型的指定
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="TFilter"></typeparam>
 /// <param name="cnn"></param>
 /// <param name="filter"></param>
 /// <param name="tbName"></param>
 /// <param name="keyFields"></param>
 /// <param name="orderType"></param>
 /// <param name="orderStr"></param>
 /// <returns></returns>
 async public static Task <IEnumerable <T> > GetListSpAsync <T, TFilter>(
     this IDbConnection cnn,
     TFilter filter   = null,
     string tbName    = null,
     string keyFields = PredefindedKeyFields,
     bool orderType   = false,
     string orderStr  = "",
     string tbFields  = "*") where TFilter : class
 {
     return(await cnn.QuerySpAsync <sp_GetList, T>(new sp_GetList()
     {
         tbName = tbName ?? typeof(T).Name,
         strWhere = filter == null ? "" : SqlWhereMapper.toWhere <TFilter>(filter),
         keyFields = keyFields ?? PredefindedKeyFields,
         OrderType = orderType,
         OrderStr = orderStr,
         tbFields = tbFields
     }));
 }