Пример #1
0
        /// <summary>
        /// 将当前过滤条件项转换为指定SQL过滤条件字符
        /// </summary>
        /// <returns></returns>
        public string ToSqlFilter(IDbContext Db)
        {
            StringBuilder SqlFilter = new StringBuilder();
            bool          isHeader  = true;

            for (int i = 0; i < FilterItems.Count; i++)
            {
                SearchItem item = FilterItems[i];
                if (item.SqlPrefixType == SqlPrefixType.EndByGroup)
                {
                    if (!isHeader)
                    {
                        SqlFilter.Append(")");
                    }
                    continue;
                }
                string s = item.ToSqlFilter(Db); //得到当前项查询条件
                if (s.IsNotWhiteSpace())         //有条件
                {
                    string parfix = "";
                    if (item.SqlPrefixType == SqlPrefixType.AfterGroupByAnd || item.SqlPrefixType == SqlPrefixType.AfterGroupByOr)
                    {
                        parfix = " (";
                    }
                    SqlFilter.AppendFormat(" {0} ({1}) ", isHeader ? parfix : GetPrefix(item.SqlPrefixType), s);
                    if (isHeader)
                    {
                        isHeader = false;
                    }
                }
            }

            string sql = SqlFilter.ToString();

            List <string> wheres = new List <string>();

            if (sql.IsNotWhiteSpace())
            {
                wheres.Add($"({sql})");
            }

            if (CustomSqlFilters.HasElement())
            {
                wheres.AddRange(CustomSqlFilters.ConvertAll(item => $"({item})"));
            }

            if (SelfDefineSqlFilter.IsNotWhiteSpace())
            {
                wheres.Add($"{SelfDefineSqlFilter}");
            }

            return(string.Join($" {Db.Function.AndSqlExp()} ", wheres));
        }
Пример #2
0
 public IFilter CopySearchItemsTo(IFilter filter)
 {
     if (filter == this)
     {
         return(this);
     }
     filter.AppendDefineItems(SqlFieldItems);
     filter.AppendDefineItems(AppendItems);
     if (SelfDefineSqlFilter.IsNotWhiteSpace())
     {
         if (filter.SelfDefineSqlFilter.IsWhiteSpace())
         {
             filter.SelfDefineSqlFilter = SelfDefineSqlFilter;
         }
         else
         {
             filter.SelfDefineSqlFilter = string.Format("({0}) and ({1})", SelfDefineSqlFilter, filter.SelfDefineSqlFilter);
         }
     }
     return(this);
 }