示例#1
0
 protected string DoForeachNotToSqlParam(DbContext db, KVPairForeachPolicyInfoBase policy, string paramName,
                                         Tuple <string, string> symbol,
                                         IEnumerable <KeyValuePair <string, object> > dict, string sql, string valueName)
 {
     if (policy.IsKVSplit)
     {
         var kvVals = dict.JoinToString <string, object>(policy.KSeparator, key =>
         {
             //进行key的拼接(例如: [name1],[name2])
             return(policy.KPrefix + key + policy.KSuffix);
         }, policy.VSeparator, value =>
         {
             //进行value的拼接(例如: @value_1,@value_2)
             return(policy.VPrefix + value + policy.VSuffix);
         });
         //替换到sql中
         sql = sql.Replace(symbol.Item1 + paramName + SqlConfigConst.SqlForeachKeyLabel + symbol.Item2, kvVals.Key);
         sql = sql.Replace(symbol.Item1 + paramName + SqlConfigConst.SqlForeachValueLabel + symbol.Item2, kvVals.Value);
     }
     else
     {
         //对集合中的key-value进行拼接
         var strVals = dict.JoinToString <KeyValuePair <string, object> >(policy.Separator,
                                                                          l => policy.KPrefix + l.Key + policy.KSuffix + policy.KVSeparator +
                                                                          policy.VPrefix + l.Value + policy.VSuffix);
         //替换到sql中
         sql = sql.Replace(symbol.Item1 + paramName + symbol.Item2, strVals);
     }
     return(sql);
 }
示例#2
0
        protected string DoKVPairForeach(DbContext db, KVPairForeachPolicyInfoBase policy, string paramName,
                                         IEnumerable <KeyValuePair <string, object> > dict, string sql, string valueName, out IDataParameter[] newParameters)
        {
            var symbol = GetSymbol(policy);

            if (policy.IsToSqlParam)
            {
                return(DoForeachToSqlParam(db, policy, paramName, symbol, dict, sql, valueName, out newParameters));
            }
            else
            {
                newParameters = null;
                return(DoForeachNotToSqlParam(db, policy, paramName, symbol, dict, sql, valueName));
            }
        }
示例#3
0
        protected string DoForeachToSqlParam(DbContext db, KVPairForeachPolicyInfoBase policy, string paramName,
                                             Tuple <string, string> symbol,
                                             IEnumerable <KeyValuePair <string, object> > dict, string sql, string valueName, out IDataParameter[] newParameters)
        {
            IDictionary <string, object> dictParam = new Dictionary <string, object>();
            string vpName;
            int    i = 0;

            if (policy.IsKVSplit)
            {
                var kvVals = dict.JoinToString <string, object>(policy.KSeparator, key =>
                {
                    //进行key的拼接(例如: [name1],[name2])
                    return(policy.KPrefix + key + policy.KSuffix);
                }, policy.VSeparator, value =>
                {
                    vpName = valueName + i++;
                    //value转为SqlParam
                    dictParam[vpName] = value;
                    //进行value的拼接(例如: @valueName_1,@valueName_2)
                    return(policy.VPrefix + SqlConfigConst.DBSymbol + vpName + policy.VSuffix);
                });
                //替换到sql中
                sql = sql.Replace(symbol.Item1 + paramName + SqlConfigConst.SqlForeachKeyLabel + symbol.Item2, kvVals.Key);
                sql = sql.Replace(symbol.Item1 + paramName + SqlConfigConst.SqlForeachValueLabel + symbol.Item2, kvVals.Value);
            }
            else
            {
                var strVals = dict.JoinToString <KeyValuePair <string, object> >(policy.Separator, l =>
                {
                    vpName = valueName + i++;
                    //value转为SqlParam
                    dictParam[vpName] = l.Value;
                    //进行key-value的拼接(例如: [name]=@valueName)
                    return(policy.KPrefix + l.Key + policy.KSuffix + policy.KVSeparator +
                           policy.VPrefix + SqlConfigConst.DBSymbol + vpName + policy.VSuffix);
                });
                //替换到sql中
                sql = sql.Replace(symbol.Item1 + paramName + symbol.Item2, strVals);
            }

            //获取新的SqlParams
            newParameters = _sqlParamCvt.DictionaryToDBParams(db, dictParam);
            return(sql);
        }