解决sql语法中in的内容大于1000时需要拆分字符串的情形

   #region 解决sql语法中in的内容大于1000时需要拆分字符串的情形

        /// <summary>
        /// 用于解决sql语法中in的内容大于1000时需要拆分字符串的情形
        /// </summary>
        /// <param name="codeSet">字符串集合</param>
        /// <returns>拆分后的集合</returns>
        protected List<List<string>> GetSplitedSet(List<string> codeSet)
        {
            List<List<string>> splittedCodeList = new List<List<string>>();
            while (codeSet.Count > 1000)
            {
                splittedCodeList.Add(codeSet.Take(1000).ToList());
                codeSet.RemoveRange(0, 1000);
            }
            if (codeSet.Count > 0)
            {
                splittedCodeList.Add(codeSet);
            }
            return splittedCodeList;
        }

        /// <summary>
        /// 根据字符串集合和字段名生成拆分后的sql条件字符串
        /// </summary>
        /// <param name="splittedCodeList">字符串集合</param>
        /// <param name="fieldName">字段名</param>
        /// <returns>sql条件字符串</returns>
        protected string GetSplitedStr(List<List<string>> splittedCodeList, string fieldName)
        {
            StringBuilder stringBuilder = new StringBuilder();
            foreach (var list in splittedCodeList)
            {
                if (stringBuilder.Length > 0)
                {
                    stringBuilder.Append(" or ");
                }
                stringBuilder.Append(fieldName + " in ('" + string.Join("','", list.ToArray()).TrimEnd(new char[] { '\'', ',' }) +
                                     "')");
            }
            return stringBuilder.ToString();
        }

        /// <summary>
        /// 根据数值集合和字段名生成拆分后的sql条件字符串
        /// </summary>
        /// <param name="splittedidList">数值集合</param>
        /// <param name="fieldName">字段名</param>
        /// <returns>条件字符串</returns>
        protected string GetSplitedStr(List<List<int>> splittedidList, string fieldName)
        {
            StringBuilder stringBuilder = new StringBuilder();
            foreach (var list in splittedidList)
            {
                if (stringBuilder.Length > 0)
                {
                    stringBuilder.Append(" or ");
                }
                stringBuilder.Append(fieldName + " in (" + GetSqlAddition(list) +
                                     ")");
            }
            return stringBuilder.ToString();
        }

        /// <summary>
        /// 获取连接后的字符串
        /// </summary>
        /// <param name="values">数值集合</param>
        /// <returns>数值连接字符串</returns>
        protected string GetSqlAddition(List<int> values)
        {
            StringBuilder sqlAddition = new StringBuilder();
            foreach (var item in values)
            {
                sqlAddition.Append(item);
                sqlAddition.Append(",");
            }
            return sqlAddition.ToString().TrimEnd(',');
        }

        /// <summary>
        /// 用于解决sql语法中in的内容大于1000时需要拆分字符串的情形
        /// </summary>
        /// <param name="idSet">数值集合</param>
        /// <returns>拆分后的集合</returns>
        protected List<List<int>> GetSplitedSet(List<int> idSet)
        {
            List<List<int>> splittedidList = new List<List<int>>();
            while (idSet.Count > 1000)
            {
                splittedidList.Add(idSet.Take(1000).ToList());
                idSet.RemoveRange(0, 1000);
            }
            if (idSet.Count > 0)
            {
                splittedidList.Add(idSet);
            }
            return splittedidList;
        }

        #endregion
    }

posted on 2012-05-11 09:39  whyapi  阅读(59)  评论(0)    收藏  举报

导航