internal string Process(string commandText, DynamicData param) { if (this.IsEmpty()) { return(commandText); } //先处理any foreach (var any in _anys) { if (param.ContainsKey(any.ParamName)) { commandText = commandText.Replace(any.Placeholder, any.Content); } else { commandText = commandText.Replace(any.Placeholder, "0=0"); //没有参数表示永远为真,这里不能替换为空文本,因为会出现where 没有条件的BUG,所以为 where 0=0 } } foreach (var like in _likes) { var name = like.ParamName; var value = param.Get(name) as string; if (value == null) { continue; //因为有any语法,所以没有传递参数也正常 } if (like.After && like.Before) { param.Set(name, string.Format("%{0}%", value)); } else if (like.After) { param.Set(name, string.Format("{0}%", value)); } else if (like.Before) { param.Set(name, string.Format("%{0}", value)); } } foreach (var sin in _ins) { var name = sin.ParamName; var values = param.Get(name) as IEnumerable; if (values == null) { continue; //因为有any语法,所以没有传递参数也正常 } param.Remove(name); if (values.Exists()) { using (var temp = StringPool.Borrow()) { var code = temp.Item; int index = 0; code.AppendFormat("{0} in (", sin.Field); foreach (var value in values) { var valueName = string.Format("{0}{1}", name, index); param.Add(valueName, value); code.AppendFormat("@{0},", valueName); index++; } if (code.Length > 1) { code.Length--; } code.Append(")"); commandText = commandText.Replace(sin.Placeholder, code.ToString()); } } else { commandText = commandText.Replace(sin.Placeholder, "0=1"); //在in语句中,如果 id in (),没有任何匹配的数值条件,那么就是无匹配结果,所以0=1 } } return(commandText); }