// init caller static void InitNameValueCollectionCaller() { Caller <NameValueCollection> .GetBuilder = (ProxyData proxyData, SqlConfig setting, NameValueCollection rawData, OperateType ot) => { ISelectBuilder builder = new SelectBuilder(); var data = new StrategyData <NameValueCollection>(proxyData, setting, rawData); data.CParser = new SqlServerCParser(proxyData.DateFormat, proxyData.Culture); InitBuilder(builder, data.Setting); var orderBy = string.IsNullOrWhiteSpace(data.RawData["orderBy"]) ? data.Setting.OrderBy.Default : data.RawData["orderBy"]; string rowNumberOrderBy = orderBy; orderBy = ParseOrderBy(data.Setting, orderBy.Trim(), ref rowNumberOrderBy); builder.SetOrderBy(string.Format(" {0} ", orderBy)); builder.SetRowNumberOrderBy(string.Format(" {0} ", rowNumberOrderBy)); builder.SetPageSize(string.IsNullOrWhiteSpace(data.RawData["pageSize"]) ? data.Setting.PageSize : Convert.ToInt32(data.RawData["pageSize"])); builder.SetPageNumber(string.IsNullOrWhiteSpace(data.RawData["pageNumber"]) ? data.Setting.PageNumber : Convert.ToInt32(data.RawData["pageNumber"])); //模糊搜索 if (!string.IsNullOrEmpty(data.RawData[data.ProxyData.FuzzySearchField] + "")) { StringBuilder sbWhere = new StringBuilder(); StringBuilder sbExpressWhere = new StringBuilder(); data.Setting.Where.Fields.Where(x => x.FuzzySearch && !string.IsNullOrEmpty(x.SqlExpress)).ToList().ForEach(x => { if (!string.IsNullOrEmpty(x.DataType) && x.ExpressIgnoreEmpty) { var val = data.CParser.ParseValue(data.RawData[data.ProxyData.FuzzySearchField] + "", x.DataType); if (!string.IsNullOrEmpty(val)) { //builder.AddWhere(data.CParser.GetSql(x.Cp, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, true)); var retSql = data.CParser.GetSql(x.Cp, x.Name, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, true, x.IsAutoAddQuotes); //sbWhere.AppendFormat((" And (1=1 " + retSql + ")")); sbExpressWhere.AppendFormat(retSql); } } else { //builder.AddWhere(data.CParser.GetSql(x.Cp, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, true)); var retSql = data.CParser.GetSql(x.Cp, x.Name, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, true, x.IsAutoAddQuotes); //sbWhere.AppendFormat((" And (1=1 " + retSql + ")")); sbExpressWhere.AppendFormat(retSql); } }); if (sbExpressWhere.Length > 0) { builder.AddWhere(sbExpressWhere.ToString()); } data.Setting.Where.Fields.Where(x => x.FuzzySearch && string.IsNullOrEmpty(x.SqlExpress)).ToList().ForEach(x => { if (x.IgnoreEmpty && !string.IsNullOrEmpty(x.DataType)) { var val = data.CParser.ParseValue(data.RawData[data.ProxyData.FuzzySearchField] + "", x.DataType); if (!string.IsNullOrEmpty(val)) { sbWhere.AppendFormat("{0}", data.CParser.GetSql(x.Cp, x.Name, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, false, x.IsAutoAddQuotes)); } } else { sbWhere.AppendFormat("{0}", data.CParser.GetSql(x.Cp, x.Name, x.DbName, data.RawData[data.ProxyData.FuzzySearchField] + "", x.SqlExpress, x.DataType, false, x.IsAutoAddQuotes)); } }); if (sbWhere.Length > 0) { builder.AddWhere(" And ( 1=2 " + sbWhere + ")"); } } // 单个实体查询语句 if (ot == OperateType.SingleSelect) { if (!string.IsNullOrEmpty(data.Setting.SingleQuery.Select)) { builder.SetSelect(data.Setting.SingleQuery.Select); } if (!string.IsNullOrEmpty(data.Setting.SingleQuery.From)) { builder.SetFrom(data.Setting.SingleQuery.From); } for (var i = 0; i < data.Setting.SingleQuery.Where.Fields.Count; ++i) { var x = data.Setting.SingleQuery.Where.Fields[i]; if (!string.IsNullOrWhiteSpace(data.RawData[x.Name])) { x.NewValue = data.RawData[x.Name]; } builder.AddWhere(data.CParser.GetSql(x)); } } // where 条件 if (ot == OperateType.MutipleSelect) { StringBuilder sbWhere = new StringBuilder(); data.Setting.Where.Fields.ForEach(x => { if (!string.IsNullOrWhiteSpace(data.RawData[x.Name])) { x.NewValue = data.RawData[x.Name]; } if (x.IsInFrom && !string.IsNullOrEmpty(x.NewValue + "")) { builder.ReplaceFrom(data.CParser.ParameterPrefix + x.DbName, "'" + data.CParser.ParseValue(x.NewValue, x.DataType) + "'"); } else if (x.IsInSelect && !string.IsNullOrEmpty(x.NewValue + "")) { builder.ReplaceSelect(data.CParser.ParameterPrefix + x.DbName, "'" + data.CParser.ParseValue(x.NewValue, x.DataType) + "'"); } else { // ignore empty if (x.IgnoreValue != null && (x.NewValue + "").Trim().ToLower() == x.IgnoreValue.Trim().ToLower()) { } else { if (x.IgnoreEmpty || x.ExpressIgnoreEmpty) { if (!string.IsNullOrEmpty(x.DataType)) { var val = data.CParser.ParseValue(x.NewValue, x.DataType); if (!string.IsNullOrEmpty(val)) { builder.AddWhere(data.CParser.GetSql(x)); } } else if (!string.IsNullOrEmpty(x.NewValue + "") || (!string.IsNullOrEmpty(x.SqlExpress) && !x.ExpressIgnoreEmpty)) { builder.AddWhere(data.CParser.GetSql(x)); } } else { builder.AddWhere(data.CParser.GetSql(x)); } } } }); } //添加系统数据 builder.AddParam("system_user_id", data.ProxyData.SystemUserId); builder.AddParam("system_datetime", data.ProxyData.SystemDateTime); return(builder); }; }