Пример #1
0
 /// <summary>
 /// 构造总数查询条件
 /// </summary>
 private static void BuildSelectCount <T>(ISelectBuilder <T> selector, RoleQueryRequeest requeest)
 {
     if (requeest.Status.HasValue)
     {
         selector.AndWhere("br.Status=@Status").Parameter("Status", requeest.Status);
     }
 }
        //创建一个查询对象构造器
        private ISelectBuilder CreateBuilder(DbContext db, ExecuteModel executeModel)
        {
            //获取当前类名
            var tableName = GetTableName(executeModel.Entity.GetType());

            //查询器
            ISelectBuilder selectBuilder = db.Select(tableName);

            //获取条件sql
            var whereSql = GetConitionsql(executeModel.Conditions);

            //添加SQL条件
            selectBuilder.Where(whereSql);
            executeModel.Conditions?.ForEach(p =>
            {     //先设置参数,组装SQL
                if (p.Oper == Operational.In || p.Oper == Operational.NotIn)
                { //In 或 not in 通过设置参数方式
                    GetParams(p.Key, p.Value, selectBuilder);
                }
                else
                {
                    selectBuilder.Parameters(p.Key, p.Value);
                }
            });

            if (executeModel.OrderColumn.IsNotNullOrEmpty())
            {//如果包括了排序字段,则使用排序
                selectBuilder.OrderBy(executeModel.OrderColumn);
            }//end if

            //返回组装的对象
            return(selectBuilder);
        }
        //根据值类型,动态组装参数名称或值
        private string GetParams(string key, object value, ISelectBuilder selectBuilder = null)
        {
            if (value != null)
            {
                var list  = new List <string>();
                var type  = value.GetType();
                var array = value as Array;
                if (array != null)
                {//数组类型
                    for (int i = 0; i < array.Length; i++)
                    {
                        var pName = $"@{key}_{i}";
                        list.Add(pName);
                        if (selectBuilder != null)
                        {//设置参数到查询器中
                            var val = array.GetValue(i);
                            selectBuilder.Parameters($"{key}_{i}", val);
                        }
                    }//end for

                    //各参数之间使用
                    return(string.Join(",", list));
                }//end if

                return(string.Empty);
            }

            throw new ArgumentNullException("使用了In或NotIn方式查询,但没有给出范围值");
        }
Пример #4
0
        public static dynamic GetDynamicWithPaging(ISelectBuilder sb, out int total)
        {
            var data = sb.Data;
            var rows = GetDynamicWithPaging(data.Select, data.From, data.Where, data.GroupBy.Trim(), data.OrderBy.Trim(),
                                            data.RowNumberOrderBy.Trim(), data.PageNumber, data.PageSize, out total, data.Wheres, data.Params.ToArray());

            return(rows);
        }
Пример #5
0
 /// <summary>
 /// Initializes a new instance of an ExistsFilter.
 /// </summary>
 /// <param name="select"></param>
 public ExistsFilter(ISelectBuilder select)
 {
     if (select == null)
     {
         throw new ArgumentNullException("select");
     }
     Select = select;
 }
        public ICompareWith Compare(ISelectBuilder selectBuilder)
        {
            _first = t => {
                selectBuilder.TryBuild(t, out string str);
                return(str);
            };

            return(this);
        }
        public ICompareBuilder With(string op, ISelectBuilder selectBuilder)
        {
            _operator = op;
            _second   = t => {
                selectBuilder.TryBuild(t, out string str);
                return(str);
            };

            return(this);
        }
Пример #8
0
 ///<summary>
 ///设置查询条件参数
 ///</summary>
 protected void SetWhereParameter <T>(ISelectBuilder <T> select, Dictionary <string, object> paras)
 {
     if (paras != null)
     {
         foreach (string key in paras.Keys)
         {
             select.Parameter(key, paras[key]);
         }
     }
 }
Пример #9
0
        public ICompareWith Compare(ISelectBuilder selectBuilder)
        {
            bool translateFunction(ISqlTranslator translator, out string str)
            {
                return(selectBuilder.TryBuild(translator, out str) && !translator.HasError);
            }

            _first = translateFunction;
            return(this);
        }
Пример #10
0
        public ICompareBuilder With(string op, ISelectBuilder selectBuilder)
        {
            _operator = op;
            bool translateFunction(ISqlTranslator translator, out string str)
            {
                return(selectBuilder.TryBuild(translator, out str) && !translator.HasError);
            }

            _second = translateFunction;
            return(this);
        }
Пример #11
0
        /// <summary>
        /// Adds the given SELECT statement to the FROM clause.
        /// </summary>
        /// <param name="builder">The SELECT statement to add.</param>
        /// <param name="alias">The optional alias to give the SELECT statement within the SELECT statement.</param>
        /// <returns>An object to support aliasing the SELECT statement and defining columns.</returns>
        public AliasedSource AddSelect(ISelectBuilder builder, string alias = null)
        {
            if (builder == null)
            {
                throw new ArgumentNullException("builder");
            }
            AliasedSource source = new AliasedSource(builder, alias);

            sources.AddSource(source.GetSourceName(), source);
            _from.Add(source);
            return(source);
        }
Пример #12
0
        public static List <T> GetModels <T>(ISelectBuilder sb)
        {
            var data = sb.Data;

            if (string.IsNullOrEmpty(data.Select))
            {
                data.Select = "*";
            }
            if (string.IsNullOrEmpty(data.From))
            {
                data.From = TableName <T>();
            }
            if ((data.Where + "").Trim() == "")
            {
                data.Where = " 1=1 ";
            }

            var builder = Db.Select <T>(data.Select).From(data.From).Where(data.Where);

            if (data.Wheres.Any())
            {
                data.Wheres.ForEach(x =>
                {
                    if (x.LogicalKey == LogicalKeyType.And)
                    {
                        builder.AndWhere(string.Format("{0} = @{1}", x.DbName, x.ParamName));
                    }
                    else if (x.LogicalKey == LogicalKeyType.Or)
                    {
                        builder.OrWhere(string.Format("{0} = @{1}", x.DbName, x.ParamName));
                    }
                });
            }
            if (!string.IsNullOrEmpty(data.OrderBy.Trim()))
            {
                builder.OrderBy(data.OrderBy);
            }
            if (!string.IsNullOrEmpty(data.GroupBy.Trim()))
            {
                builder.GroupBy(data.GroupBy);
            }

            if (data.Params.Any())
            {
                data.Params.ForEach(x =>
                {
                    builder.Parameter(x.ParamName, x.Value);
                });
            }

            return(builder.QueryMany());
        }
Пример #13
0
        public static dynamic GetDynamic(ISelectBuilder sb)
        {
            var data = sb.Data;

            if ((data.Select + "").Trim() == "")
            {
                data.Select = "*";
            }
            if ((data.From + "").Trim() == "")
            {
                throw new Exception("From cannot be empty or nothing");
            }
            if ((data.Where + "").Trim() == "")
            {
                data.Where = " 1=1 ";
            }

            var builder = Db.Select <dynamic>(data.Select).From(data.From).Where(data.Where);

            if (data.Wheres.Any())
            {
                data.Wheres.ForEach(x =>
                {
                    if (x.LogicalKey == LogicalKeyType.And)
                    {
                        builder.AndWhere(string.Format("{0} = @{1}", x.DbName, x.ParamName));
                    }
                    else if (x.LogicalKey == LogicalKeyType.Or)
                    {
                        builder.OrWhere(string.Format("{0} = @{1}", x.DbName, x.ParamName));
                    }
                });
            }
            if (!string.IsNullOrEmpty(data.GroupBy.Trim()))
            {
                builder.GroupBy(data.GroupBy);
            }
            if (!string.IsNullOrEmpty(data.OrderBy.Trim()))
            {
                builder.OrderBy(data.OrderBy);
            }

            if (data.Params.Any())
            {
                data.Params.ForEach(x =>
                {
                    builder.Parameter(x.ParamName, x.Value);
                });
            }

            return(builder.QueryMany());
        }
Пример #14
0
        public SparqlQueryGenerator(ISelectBuilder selectBuilder)
        {
            SelectedVariables  = new List <SparqlVariable>();
            CoalescedVariables = new Dictionary <SparqlVariable, SparqlExpression>();
            SelectBuilder      = selectBuilder;
#if NET35
            QueryBuilder   = selectBuilder.GetQueryBuilder();
            PatternBuilder = QueryBuilder.RootGraphPatternBuilder;
#else
            QueryBuilder   = SelectBuilder;
            PatternBuilder = QueryBuilder.Root;
#endif
        }
Пример #15
0
 /// <summary>
 /// Initializes a new instance of a SelectCombiner.
 /// </summary>
 protected SelectCombiner(ISelectBuilder leftHand, ISelectBuilder rightHand)
 {
     if (leftHand == null)
     {
         throw new ArgumentNullException("leftHand");
     }
     if (rightHand == null)
     {
         throw new ArgumentNullException("rightHand");
     }
     this.leftHand  = leftHand;
     this.rightHand = rightHand;
     this.orderBy   = new List <OrderBy>();
 }
Пример #16
0
 /// <summary>
 /// 构造数据查询条件
 /// </summary>
 private static void BuildSelectRow <T>(ISelectBuilder <T> selector, RoleQueryRequeest requeest)
 {
     if (requeest.Status.HasValue)
     {
         selector.AndWhere("br.Status=@Status").Parameter("Status", requeest.Status);
     }
     if (!string.IsNullOrEmpty(requeest.OrderBy))
     {
         selector.OrderBy(requeest.OrderBy);
     }
     if (requeest.CurrentPageIndex.HasValue && requeest.PageSize.HasValue)
     {
         selector.Paging(requeest.CurrentPageIndex.Value, requeest.PageSize.Value);
     }
 }
Пример #17
0
        public static List <T> GetModelListTree <T>(this ISelectBuilder source)
        {
            IDataReader       dr     = source.DataReader();
            TreeMemoAttribute attr   = typeof(T).GetCustomAttributes(typeof(TreeMemoAttribute), false)[0] as TreeMemoAttribute;
            List <T>          items  = new List <T>();
            List <T>          quene  = new List <T>();
            List <string>     fields = new List <string>();

            using (dr)
            {
                while (dr.Read())
                {
                    if (fields.Count == 0)
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            fields.Add(dr.GetName(i).ToLower());
                        }
                    }
                    if (dr[attr.PID].Equals("") || dr[attr.PID] is System.DBNull)
                    {
                        items.Add(CreateNode <T>(dr, fields));
                    }
                    else
                    {
                        var pid = items.Find(p => p.GetType().GetProperty(attr.ID).GetValue(p).Equals(dr[attr.PID].ToString()));
                        if (pid == null)
                        {
                            quene.Add(CreateNode <T>(dr, fields));
                        }
                        else
                        {
                            List <T> temp = pid.GetType().GetProperty(attr.Children).GetValue(pid) as List <T>;
                            if (temp == null)
                            {
                                temp = new List <T>();
                            }
                            temp.Add(CreateNode <T>(dr, fields));
                            pid.GetType().GetProperty(attr.Children).SetValue(pid, temp);
                        }
                    }
                    Create(items, quene, attr);
                }
            }
            return(items);
        }
Пример #18
0
        // common methods
        static void InitBuilder(ISelectBuilder builder, SqlConfig setting)
        {
            builder.SetSelect(setting.Select);
            builder.SetFrom(setting.From);
            var    orderBy          = setting.OrderBy.Default;
            string rowNumberOrderBy = orderBy;

            orderBy = ParseOrderBy(setting, orderBy.Trim(), ref rowNumberOrderBy);

            builder.AddOrderBy(string.Format(" {0} ", orderBy));
            builder.AddRowNumberOrderBy(string.Format(" {0} ", rowNumberOrderBy));

            var groupBy = setting.GroupBy.Default + "";

            groupBy = ParseGroupBy(setting, groupBy.Trim());
            builder.AddGroupBy(groupBy);

            builder.SetPageSize(setting.PageSize);
            builder.SetPageNumber(setting.PageNumber);
        }
Пример #19
0
        public void SqlBuilderSample(FeiniuBus.DynamicQuery dynamicQuery, ISelectBuilder selectBuilder)
        {
            var sb       = new StringBuilder();
            var mappings = new SqlFieldMappings();

            mappings.Map("Guest", "t1.Guest")
            .Map("Address", "t1.Address")
            .Map("Disabled", "t1.Disabled")
            .Map("Amout", "t1.Amout")
            .Map("Price", "t1.Price")
            .Map("Drink", "t1.Drink")
            .Map("Count", "t1.Count")
            .Map("Total", "t1.Total")
            .Map("Url", "t1.Url");
            selectBuilder.Mapping(mappings);
            selectBuilder.Where(dynamicQuery.ParamGroup);

            var whereClause   = selectBuilder.BuildWhere();
            var orderbyClause = selectBuilder.OrderBy(dynamicQuery.Order);

            System.Console.WriteLine(whereClause);
            System.Console.WriteLine(orderbyClause);
        }
Пример #20
0
 /// <summary>
 /// Adds the given SELECT statement to the FROM clause.
 /// </summary>
 /// <param name="builder">The SELECT statement to add.</param>
 /// <param name="alias">The optional alias to give the SELECT statement within the SELECT statement.</param>
 /// <returns>An object to support aliasing the SELECT statement and defining columns.</returns>
 public AliasedSource AddSelect(ISelectBuilder builder, string alias = null)
 {
     if (builder == null)
     {
         throw new ArgumentNullException("builder");
     }
     AliasedSource source = new AliasedSource(builder, alias);
     sources.AddSource(source.GetSourceName(), source);
     _from.Add(source);
     return source;
 }
Пример #21
0
 private SelectCombiner buildSelectCombiner(MatchResult result, ISelectBuilder leftHand, ISelectBuilder rightHand)
 {
     MatchResult union = result.Matches[SqlGrammar.SelectCombiner.Union];
     if (union.IsMatch)
     {
         return new Union(leftHand, rightHand);
     }
     MatchResult intersect = result.Matches[SqlGrammar.SelectCombiner.Intersect];
     if (intersect.IsMatch)
     {
         return new Intersect(leftHand, rightHand);
     }
     MatchResult except = result.Matches[SqlGrammar.SelectCombiner.Except];
     if (except.IsMatch)
     {
         return new Except(leftHand, rightHand);
     }
     MatchResult minus = result.Matches[SqlGrammar.SelectCombiner.Minus];
     if (minus.IsMatch)
     {
         return new Minus(leftHand, rightHand);
     }
     throw new InvalidOperationException();
 }
Пример #22
0
 /// <summary>
 /// Initializes a new instance of a Intersect.
 /// </summary>
 /// <param name="leftHand">The left hand SELECT command.</param>
 /// <param name="rightHand">The right hand SELECT command.</param>
 public Intersect(ISelectBuilder leftHand, ISelectBuilder rightHand)
     : base(leftHand, rightHand)
 {
 }
Пример #23
0
 /// <summary>
 /// Initializes a new instance of a Except.
 /// </summary>
 /// <param name="leftHand">The left hand SELECT command.</param>
 /// <param name="rightHand">The right hand SELECT command.</param>
 public Except(ISelectBuilder leftHand, ISelectBuilder rightHand)
     : base(leftHand, rightHand)
 {
 }
Пример #24
0
 /// <summary>
 /// 可以修改 ISelectBuilder 的 Select, From , Where 语句
 /// </summary>
 /// <param name="pq"></param>
 protected virtual void BeforeList(ISelectBuilder builder)
 {
 }
Пример #25
0
 protected virtual void BeforeGetMaster(ISelectBuilder builder)
 {
 }
Пример #26
0
 public T GetModel(ISelectBuilder sb)
 {
     return(DbHelper.GetModel <T>(sb));
 }
Пример #27
0
 public IQueryBuilderSelectOrWhere SelectAs(ISelectBuilder selectBuilder, string alias) =>
 SkipIfError(() =>
 {
Пример #28
0
 /// <summary>
 /// Initializes a new instance of a Union.
 /// </summary>
 /// <param name="leftHand">The left hand SELECT command.</param>
 /// <param name="rightHand">The right hand SELECT command.</param>
 public Union(ISelectBuilder leftHand, ISelectBuilder rightHand)
     : base(leftHand, rightHand)
 {
 }
Пример #29
0
 protected IQueryBuilder <TRecord> CreateQueryBuilder(ISelectBuilder selectBuilder)
 {
     return(new QueryBuilder <TRecord, ISelectBuilder>(selectBuilder, RelationalTransaction, TableAliasGenerator, UniqueParameterNameGenerator, ParamValues, Params, ParamDefaults));
 }
Пример #30
0
 /// <summary>
 /// Initializes a new instance of a Minus.
 /// </summary>
 /// <param name="leftHand">The left hand SELECT command.</param>
 /// <param name="rightHand">The right hand SELECT command.</param>
 public Minus(ISelectBuilder leftHand, ISelectBuilder rightHand)
     : base(leftHand, rightHand)
 {
 }
Пример #31
0
 SubquerySelectBuilder CreateSubqueryBuilder(ISelectBuilder subquerySelectBuilder)
 {
     return(new SubquerySelectBuilder(new SubquerySource(subquerySelectBuilder.GenerateSelectWithoutDefaultOrderBy(), tableAliasGenerator.GenerateTableAlias())));
 }
Пример #32
0
 public SelectStatement()
 {
     SelectBuilder = new SelectBuilder();
 }