示例#1
0
        private List <string> GetIDs()
        {
            StringBuilder sb    = new StringBuilder();
            List <string> idStr = new List <string>();

            if (_groupNode.IsGroup && _groupNode.Group.hasTypes)
            {
                int counter = 0;
                foreach (var no in _groupNode.ChildrensList)
                {
                    sb.Append($"{no.TypeID.ID},");
                    if (counter >= 199)
                    {
                        counter = 0;
                        idStr.Add(sb.RemoveLast(1).ToString());
                    }
                }
                idStr.Add(sb.RemoveLast(1).ToString());
            }
            else if (_groupNode.IsGroup && _groupNode.TypeID != null)
            {
                sb.Append($"{_groupNode.TypeID.ID},");
                idStr.Add(sb.RemoveLast(1).ToString());
            }

            return(idStr);
        }
示例#2
0
        string BuildArguments(string[] targets)
        {
            var sb = new StringBuilder();

            sb.Append(_projFile);
            sb.AppendFormat(" /m:{0}", _count <= 1?1:_count);
            sb.Append(" /v:" + Parse(_verbosity));
            if (Properties != null)
            {
                sb.Append(" /p:");
                foreach (var name in Properties.AllKeys)
                {
                    sb.AppendFormat("{0}={1};", name, Properties[name]);
                }
                sb.RemoveLast();
            }

            if (targets.Length > 0)
            {
                sb.Append(" /t:");
                foreach (var t in targets)
                {
                    sb.Append(t + ";");
                }
                sb.RemoveLast();
            }

            sb.Append(" /clp:ErrorsOnly;PerformanceSummary");
            return(sb.ToString());
        }
示例#3
0
        internal DaoErrMsg UpdatePersonnel(List <PersonnelContent> Personnel)
        {
            DaoErrMsg err = new DaoErrMsg();

            if (Personnel.Count <= 0)
            {
                return(err);
            }

            //先清除人員資資料;//
            string strSchema = string.Format("DELETE FROM tbPersonnel;");

            m_SQL.ExecuteNonQuery(strSchema);

            //更新資料;//
            int           Count    = 0;
            StringBuilder sbSchema = new StringBuilder();

            sbSchema.Append(@"insert into tbPersonnel( [Key], [JobNumber], [ChineseName], [EnglishName], [CardNumber], [Alias], [Voice], [TEL], [Phone]) values ");
            for (int i = 0; i < Personnel.Count; i++)
            {
                sbSchema.AppendFormat(@"('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}'), "
                                      , Personnel[i].Key
                                      , Personnel[i].JobNumber
                                      , Personnel[i].ChineseName
                                      , Personnel[i].EnglicshName
                                      , Personnel[i].CardNumber
                                      , Personnel[i].Alias
                                      , Personnel[i].Voice
                                      , Personnel[i].TEL
                                      , Personnel[i].Phone);
                Count++;

                if (Count >= 50)
                {
                    sbSchema.RemoveLast(",");
                    err = m_SQL.ExecuteNonQuery(sbSchema.ToString());
                    if (err.isError == true)
                    {
                        return(err);
                    }

                    sbSchema.Length   = 0;
                    sbSchema.Capacity = 0;
                    Count             = 0;
                    sbSchema.Append(@"insert into tbPersonnel( [Key], [JobNumber], [ChineseName], [EnglishName], [CardNumber], [Alias], [Voice], [TEL], [Phone]) values ");
                }
            }

            if (Count != 0)
            {
                sbSchema.RemoveLast(",");
                err = m_SQL.ExecuteNonQuery(sbSchema.ToString());
            }

            return(err);
        }
示例#4
0
        private void HandleAnonymous(NewExpression node)
        {
            var i = 0;

            foreach (var arg in node.Arguments)
            {
                //_sb.AppendLine();
                Visit(arg);
                _sb.AppendFormat(" as {0},", node.Members[i].Name);
                i++;
            }
            _sb.RemoveLast();
        }
示例#5
0
        internal DaoErrMsg UpdateAttendance(List <Attendance> attendance)
        {
            DaoErrMsg err = new DaoErrMsg();

            if (attendance.Count <= 0)
            {
                return(err);
            }

            //先清除人員資資料;//
            string strSchema = string.Format("DELETE FROM tbAttendance;");

            m_SQL.ExecuteNonQuery(strSchema);

            //更新資料;//
            int           Count    = 0;
            StringBuilder sbSchema = new StringBuilder();

            sbSchema.Append(@"insert into tbAttendance( [CardNum], [Date], [Time]) values ");
            for (int i = 0; i < attendance.Count; i++)
            {
                sbSchema.AppendFormat(@"('{0}','{1}','{2}'), "
                                      , attendance[i].CardNo
                                      , attendance[i].Time.ToString("yyyyMMdd")
                                      , attendance[i].Time.ToString("HHmm"));
                Count++;

                if (Count >= 50)
                {
                    sbSchema.RemoveLast(",");
                    err = m_SQL.ExecuteNonQuery(sbSchema.ToString());
                    if (err.isError == true)
                    {
                        return(err);
                    }

                    sbSchema.Length   = 0;
                    sbSchema.Capacity = 0;
                    Count             = 0;
                    sbSchema.Append(@"insert into tbAttendance( [CardNum], [Date], [Time]) values ");
                }
            }

            if (Count != 0)
            {
                sbSchema.RemoveLast(",");
                err = m_SQL.ExecuteNonQuery(sbSchema.ToString());
            }

            return(err);
        }
        public void FactMethodName()
        {
            Expression <Func <Test, bool> > data = t => new[] { 1, 2 }.Contains(t.Id);
            var meth = ObjectExtend.CastAs <MethodCallExpression>(data.Body);

            Assert.Equal("Contains", meth.Method.Name);

            var param = ObjectExtend.CastAs <MemberExpression>(meth.Arguments[1]);

            Assert.True(param.BelongsToParameter());
            var sb = new StringBuilder();

            sb.Append(param.Member.Name).Append(" in (");

            var list = ObjectExtend.CastAs <IEnumerable>(meth.Arguments[0].GetValue());
            var en = list.GetEnumerator();

            while (en.MoveNext())
            {
                sb.Append(en.Current).Append(",");
            }
            sb.RemoveLast();
            sb.Append(")");
            Write(sb.ToString());
        }
        public static string GetDocumentString(this MethodInfo method)
        {
            var sb = new StringBuilder();

            sb.Append("M:");
            sb.Append(GetDocumentStringInternal(method.DeclaringType));
            sb.Append('.');
            sb.Append(method.Name);
            if (method.IsGenericMethod)
            {
                var generics = method.GetGenericArguments();
                sb.Append("``").Append(generics.Length);
            }
            var parameters = method.GetParameters();

            if (parameters.Length > 0)
            {
                sb.Append("(");
                foreach (var parameter in parameters)
                {
                    sb.Append(GetParameterDocumentString(parameter.ParameterType));
                    sb.Append(",");
                }
                sb.RemoveLast(",");
                sb.Append(")");
            }
            return(sb.ToString());
        }
示例#8
0
        public static string CreateUpdateEntitySql(EntityDef entityDef, int number = 0)
        {
            StringBuilder args = new StringBuilder();

            foreach (EntityPropertyDef propertyInfo in entityDef.PropertyDefs)
            {
                if (propertyInfo.IsPrimaryKey)
                {
                    continue;
                }

                args.Append($" {propertyInfo.DbReservedName}={propertyInfo.DbParameterizedName}_{number},");
            }

            args.RemoveLast();

            EntityPropertyDef primaryKeyProperty = entityDef.PrimaryKeyPropertyDef;
            EntityPropertyDef deletedProperty    = entityDef.GetPropertyDef(nameof(Entity.Deleted)) !;
            EntityPropertyDef versionProperty    = entityDef.GetPropertyDef(nameof(Entity.Version)) !;

            StringBuilder where = new StringBuilder();

            where.Append($"{primaryKeyProperty.DbReservedName}={primaryKeyProperty.DbParameterizedName}_{number} AND ");
            where.Append($"{versionProperty.DbReservedName}={versionProperty.DbParameterizedName}_{number} - 1 AND ");
            where.Append($"{deletedProperty.DbReservedName}=0");

            return($"UPDATE {entityDef.DbTableReservedName} SET {args} WHERE {where};");
        }
示例#9
0
        public string GetColumnsSql(params Expression[] columns)
        {
            var sb = new StringBuilder();

            columns.ForEach(d => sb.Append($"{_results["col"].Dequeue()},"));
            return(sb.RemoveLast().ToString());
        }
示例#10
0
        private void WriteUpdateSql(StreamWriter writer)
        {
            writer.WriteLine("--Update " + tableName + " ");
            writer.WriteLine("if(@pOptions=" + (int)SqlType.Update + ")");
            writer.WriteLine("begin");
            writer.WriteLine("UPDATE	"+ tableName + " ");

            writer.WriteLine("SET");

            var stringBuilder = new StringBuilder();

            foreach (var schema in tableSchema.Where(p => p.IsIdentity.ToLower() == "false"))
            {
                stringBuilder.AppendLine("" + schema.ColumnName + "	=	@"+ schema.ColumnName + " ,");
            }
            writer.WriteLine(stringBuilder.RemoveLast(","));

            writer.WriteLine("WHERE	" + tablePk.ColumnName + "	=	@"+ tablePk.ColumnName + ";");

            writer.WriteLine("IF @@ROWCOUNT = 0");
            writer.WriteLine("Begin");
            writer.WriteLine("SET @Msg='Warning: No rows were Updated';	");
            writer.WriteLine("End");
            writer.WriteLine("Else");
            writer.WriteLine("Begin");
            writer.WriteLine("SET @Msg='Data Updated Successfully';");
            writer.WriteLine("End");
            writer.WriteLine("End");
            writer.WriteLine("--End of Update " + tableName + " ");
        }
示例#11
0
        private void FilterShowResult()
        {
            var lpGrid = XamlComponentsManager.GetManager().Get <Grid>(XamlComponentsType.LpGrid);

            // 获取数据库
            var newTypeIDs = LocalConfigLoadManager.GetConfigClass <TypeIDDBClass>();
            List <LpGroupTypeShow> groups = new List <LpGroupTypeShow>();

            foreach (var item in _lpItemsBuffer)
            {
                var iShow = new LpGroupTypeShow();
                // 获取物品名称和数量
                newTypeIDs.TryGet(item.type_id, out string name);
                iShow.Name    = name;
                iShow.Count   = item.quantity;
                iShow.IskCost = item.isk_cost;
                iShow.LpCpost = item.lp_cost;
                if (item.required_items != null)
                {
                    // 前置名和前置数量,以及前置总价
                    StringBuilder preNames  = new StringBuilder();
                    StringBuilder preCounts = new StringBuilder();
                    foreach (var preItem in item.required_items)
                    {
                        _dictLpItemRequestData.TryGetValue(preItem.type_id, out var jsonfpi);
                        if (jsonfpi != null)
                        {
                            // 这里需要有个变量来控制前置消耗是按照卖单还是买单
                            if (!Signal.LpPreSale)
                            {
                                iShow.PreCost += jsonfpi.buy.max * preItem.quantity;
                            }
                            else
                            {
                                iShow.PreCost += jsonfpi.sell.min * preItem.quantity;
                            }
                        }
                        newTypeIDs.TryGet(preItem.type_id, out string preN);
                        preNames.Append($"{preN}&");
                        preCounts.Append($"{preItem.quantity}&");
                    }
                    preNames.RemoveLast(1);
                    iShow.PreName = preNames.ToString();
                    preCounts.RemoveLast(1);
                    iShow.PreCount = preCounts.ToString();
                }
                _dictLpItemRequestData.TryGetValue(item.type_id, out var jsonfi);
                if (jsonfi != null)
                {
                    iShow.Buy  = jsonfi.buy.max * item.quantity;
                    iShow.Sale = jsonfi.sell.min * item.quantity;
                }
                groups.Add(iShow);
            }

            var queryLpGroupVM = lpGrid.Resources["queryLpGroupVM"] as ViewModel.Query.QueryLpGroupVM;

            queryLpGroupVM.TypeShowSources = groups;
            StatusManager.GetManager()?.ShowMsg($"请求数据完毕.....");
        }
示例#12
0
        /// <summary>
        /// 输出一个包含集合中所有元素的字符串, 默认形如[a1, a2, a3, [a41, a42, a43], a5]
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="collection">指定的集合</param>
        /// <param name="separator">元素之间的分隔符, 默认是", "</param>
        /// <param name="prefix">第一个元素之前的字符串, 默认是"["</param>
        /// <param name="postfix">最后一个元素之后的字符串, 默认是"]"</param>
        /// <param name="transform">对于每个元素, 输出字符串之前进行一个操作.默认为null, 代表调用ToString().</param>
        /// <returns></returns>
        public static string ToAllEnumStrings <T>(IEnumerable <T> collection,
                                                  Func <T, string> transform,
                                                  string separator = ", ",
                                                  string prefix    = "[",
                                                  string postfix   = "]")
        {
            if (transform is null)
            {
                throw new ArgumentNullException(nameof(transform));
            }
            if (!collection.Any())
            {
                return($"{prefix}No Items{postfix}");
            }
            var sb = new StringBuilder(prefix);

            foreach (var item in collection)
            {
                string s = item switch
                {
                    null => "[NULL]",
                    string ss => ss,
                    IEnumerable <T> ienum => ToAllEnumStrings(ienum, separator, prefix, postfix),
                    _ => transform.Invoke(item)
                };
                sb.Append(s);
                sb.Append(separator);
            }
            sb.RemoveLast(separator.Length);
            sb.Append(postfix);
            return(sb.ToString());
        }
示例#13
0
 public static StringBuilder RemoveLastIf(this StringBuilder sb, char c)
 {
     if (sb.Length > 0 && sb[sb.Length - 1] == c)
     {
         sb.RemoveLast();
     }
     return(sb);
 }
        public void RemoveLastTest()
        {
            StringBuilder _builder = new StringBuilder();

            _builder.Append("Hello World;");
            _builder = _builder.RemoveLast(";");
            Assert.AreEqual("Hello World", _builder.ToString());
        }
示例#15
0
        private void QueryLpGroup()
        {
            StringBuilder sb     = new StringBuilder();
            List <string> idStrs = new List <string>();

            for (int i = 0; i < _ids.Count; i++)
            {
                sb.Append($"{_ids[i]},");
                if (i != 0 && i % 199 == 0)
                {
                    sb.RemoveLast(1);
                    idStrs.Add(sb.ToString());
                    sb.Clear();
                }
            }
            sb.RemoveLast(1);
            idStrs.Add(sb.ToString());
            // 设置批次查询计数器与查询状态,使用多线程查询时,禁止对同一个功能的后续查询
            // 等待批次处理完毕再进行下面的
            counter  = 0;
            times    = idStrs.Count;
            querying = true;
            _dictLpItemRequestData.Clear();
            foreach (var str in idStrs)
            {
                if (string.IsNullOrEmpty(str))
                {
                    times--;
                    if (times <= 0)
                    {
                        querying = false;
                        StatusManager.GetManager()?.ShowMsg("没有匹配到请求的数据,本次请求取消,检查物品类型.....");
                        return;
                    }
                    continue;
                }

                new Thread(new ThreadStart(() => {
                    // HttpRequestManager.SetQueryPost(str, RegionGalaxyID.MarketGroupRegionID, RegionGalaxyID.MarketGroupGalaxyID);
                    HttpRequestManager.SetQueryPost(str, RegionGalaxyID.LpQueryRegionID, RegionGalaxyID.LpQueryGalaxyID);
                    HttpRequestManager.Post("NULL", QueryLpGroupCompleteMuti);
                })).Start();
                // 休眠0.1s,否则会有线程不安全,线程准备需要时间,这里赋值可能造成引用错乱
                Thread.Sleep(100);
            }
        }
示例#16
0
        string IXapDataProvider.ExecuteJson()
        {
            StringBuilder json   = new StringBuilder();
            string        retVal = string.Empty;

            try {
                OpenConnection();

                XapDataReader dr = new XapDataReader(_dbCommand.ExecuteReader());

                json.AppendLine("{\"data\":[");
                do
                {
                    string obj     = string.Empty;
                    string colName = string.Empty;

                    while (dr.Read())
                    {
                        json.AppendLine("{");

                        for (int i = 0; i <= dr.FieldCount - 1; i++)
                        {
                            obj     = dr.GetValue(i).ToString().Trim();
                            colName = dr.GetName(i);
                            if (obj == null || string.IsNullOrEmpty(obj.ToString()))
                            {
                                obj = string.Empty;
                            }
                            json.AppendLine(string.Format("\"{0}\":\"{1}\",", colName, obj.ToString()));
                        }
                        json = json.RemoveLast(",");
                        json.AppendLine("},");
                    }
                } while (dr.NextResult());
                json = json.RemoveLast(",");
                json.AppendLine("]}");
                retVal = json.ToString();
                return(retVal);
            } catch (Exception ex) {
                throw new XapException($"Error executing json for {_dbConnectionContext.DbKey}", ex);
            } finally {
                ((IXapDataProvider)this).CloseConnection();
            }
        }
示例#17
0
 /// <summary>
 /// 移除尾部的指定字符串, 如果不符合将不更动.常用于更动字符串中的文件扩展名.
 /// </summary>
 /// <param name="sb"></param>
 /// <param name="toRemove">指定的一系列字符串, 如果尾部符合, 将被移除</param>
 /// <returns>移除尾部指定字符串的结果</returns>
 public static void RemoveLast(this StringBuilder sb, params string[] toRemove)
 {
     foreach (var endString in toRemove)
     {
         if (sb.ToString().EndsWith(endString))
         {
             sb.RemoveLast(endString.Length);
         }
     }
 }
        private static string BuildJson(EntityValidationInfo entity)
        {
            var sb = new StringBuilder("rules:{");

            foreach (var property in entity.Properties)
            {
                SerializeProperty(string.Empty, property, sb);
            }
            return(sb.RemoveLast().Append("}").ToString());
        }
        public void RemoveLastEmptyInstance()
        {
            StringBuilder sb = new StringBuilder();

            string expected = "";

            sb.RemoveLast("!");

            Assert.AreEqual(expected, sb.ToString());
        }
示例#20
0
 public static void WriteColumnsNames(ICollection <string> columns, StringBuilder builder,
                                      Func <string, string> formatter)
 {
     columns.MustNotBeNull();
     formatter.MustNotBeNull();
     foreach (var column in columns)
     {
         builder.Append(formatter(column.Trim())).Append(",");
     }
     builder.RemoveLast();
 }
        public void RemoveLastExactMatch()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("!");

            string expected = "";

            sb.RemoveLast("!");

            Assert.AreEqual(expected, sb.ToString());
        }
示例#22
0
 static object Print(object x)
 {
     var ie = x as System.Collections.IEnumerable;
     if (ie != null)
     {
         var sb = new StringBuilder("[");
         foreach (var y in ie) sb.AppendFormat("{0}, ", Print(y));
         return sb.RemoveLast(2).Append("]").ToString();
     }
     return x;
 }
        public void RemoveLast()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Something awesome!!");

            string expected = "Something awesome!";

            sb.RemoveLast("!");

            Assert.AreEqual(expected, sb.ToString());
        }
示例#24
0
        public static void WriteAllLinesWithoutUselessNewLine(string path, string[] contents)
        {
            var result = new StringBuilder();

            foreach (string line in contents)
            {
                result.Append(line).Append('\n');
            }
            result.RemoveLast();
            WriteAllText(path, result.ToString());
        }
示例#25
0
        private void WriteAddSql(StreamWriter writer)
        {
            Blank(writer);
            writer.WriteLine("--Save " + tableName + "");
            writer.WriteLine("if(@pOptions=" + (int)SqlType.Add + ")");
            writer.WriteLine("begin");
            writer.WriteLine("INSERT INTO " + tableName + "");
            writer.WriteLine("(");

            var  stringBuilder   = new StringBuilder();
            bool firstINSERTINTO = true;

            foreach (var schema in tableSchema)
            {
                if (!firstINSERTINTO)
                {
                    stringBuilder.Append(schema.ColumnName + ",");
                }
                firstINSERTINTO = false;
            }

            writer.WriteLine(stringBuilder.RemoveLast(","));

            writer.WriteLine(")");
            writer.WriteLine("VALUES( ");


            stringBuilder = new StringBuilder();
            bool firstVALUES = true;

            foreach (var schema in tableSchema)
            {
                if (!firstVALUES)
                {
                    stringBuilder.Append("@" + schema.ColumnName + ",");
                }
                firstVALUES = false;
            }
            writer.WriteLine(stringBuilder.RemoveLast(","));

            writer.WriteLine(")");

            writer.WriteLine("IF @@ROWCOUNT = 0");
            writer.WriteLine("Begin");
            writer.WriteLine("SET @Msg='Warning: No rows were Inserted';	");
            writer.WriteLine("End");
            writer.WriteLine("Else");
            writer.WriteLine("Begin");
            writer.WriteLine("SET @Msg='Data Saved Successfully';	");
            writer.WriteLine("End					");
            writer.WriteLine("end");
            writer.WriteLine("--End of Save " + tableName + "");
        }
示例#26
0
        public void Test07_RemoveLastNStringBuilder()
        {
            StringBuilder expected             = new StringBuilder("Building with");
            StringBuilder testBuilderPlusChars = new StringBuilder(expected.ToString());

            string toAdd = " multiple characters";

            testBuilderPlusChars.Append(toAdd);

            testBuilderPlusChars.RemoveLast(toAdd.Length);

            Assert.AreEqual(expected.ToString(), testBuilderPlusChars.ToString());
        }
示例#27
0
        private static StringBuilder CreateWhereSql(Hashtable sqlWhere)
        {
            StringBuilder _builder = new StringBuilder();

            foreach (DictionaryEntry de in sqlWhere)
            {
                string _key = de.Key.ToString().ToLower();
                _builder.AppendFormat("{0}=@{1} and ", _key, _key);
            }

            _builder = _builder.RemoveLast("and");
            return(_builder);
        }
示例#28
0
        private static StringBuilder CreateUpdateSql(Hashtable sqlWhere)
        {
            StringBuilder builder = new StringBuilder();

            foreach (DictionaryEntry de in sqlWhere)
            {
                string key = de.Key.ToString().ToLower();
                builder.AppendFormat("{0}=@{1}, ", key, key);
            }

            builder = builder.RemoveLast(",");
            return(builder);
        }
示例#29
0
        private void GiveRandomSpells(ConnectedPlayer player)
        {
            StringBuilder playerMsg = new StringBuilder("You have knowledge of the following spells: ");

            foreach (WizardSpellData randomSpell in GetRandomWizardSpells())
            {
                Spell spell = randomSpell.AddToPlayer(player.Script);
                player.Script.mind.AddSpell(spell);
                playerMsg.Append($"<b>{randomSpell.Name}</b>, ");
            }
            playerMsg.RemoveLast(", ").Append(".");

            Chat.AddExamineMsgFromServer(player.GameObject, playerMsg.ToString());
        }
示例#30
0
 private void AddConstraints(List <ForeignKeyDefinition> foreignKeys)
 {
     _sb.RemoveLastIfEquals(',').Append(',');
     foreignKeys.ForEach(fk =>
     {
         _sb.Append("foreign key (");
         fk.Columns.ForEach(col => _sb.Append(_provider.EscapeIdentifier(col) + ","));
         _sb.RemoveLast().Append(")");
         _sb.Append(" references " + _provider.EscapeTableName(fk.ParentTable) + "(");
         fk.ParentColumns.ForEach(col => _sb.Append(_provider.EscapeIdentifier(col) + ","));
         _sb.RemoveLast().Append(")");
         if (fk.OnUpdate != ForeignKeyRelationCascade.NotSet)
         {
             _sb.Append(" on update " + fk.OnUpdate);
         }
         if (fk.OnDelete != ForeignKeyRelationCascade.NotSet)
         {
             _sb.Append(" on delete " + fk.OnDelete);
         }
         _sb.AppendLine().Append(',');
     });
     _sb.RemoveLast();
 }
示例#31
0
        public static string FormatNoWarn(List <int> noWarn)
        {
            var stringBuilder = new StringBuilder();

            foreach (var warningNumber in noWarn)
            {
                stringBuilder.Append($"{warningNumber};");
            }

            stringBuilder.RemoveLast();

            var noWarnString = stringBuilder.ToString();

            return(noWarnString);
        }
示例#32
0
        static object Print(object x)
        {
            var ie = x as System.Collections.IEnumerable;

            if (ie != null)
            {
                var sb = new StringBuilder("[");
                foreach (var y in ie)
                {
                    sb.AppendFormat("{0}, ", Print(y));
                }
                return(sb.RemoveLast(2).Append("]").ToString());
            }
            return(x);
        }
示例#33
0
        public static void AppendParameterList(StringBuilder builder, params object[] paras)
        {
            if ((paras != null) && paras.Any())
            {
                builder.Append(ParamsStart);

                foreach (var idVal in paras)
                {
                    builder.Append(idVal?.ToString() ?? ParamNull);
                    builder.Append(ParamsSeparator);
                }
                builder.RemoveLast(ParamsSeparator);

                builder.Append(ParamsEnd);
            }
        }
示例#34
0
        internal static async Task UpdateValues <T>(this string connection, T m, string query, params string[] byteFields)
        {
            if (query.ContainsAny("from", "where"))
            {
                string         table       = query.WordAfter("from");
                string         condition   = query.GetBetween(table, query.LastWord()) + query.LastWord();
                StringBuilder  UpdateQuery = new StringBuilder($"UPDATE {table} SET ");
                PropertyInfo[] props       = m.GetType().GetProperties();

                List <SqlParameter> parameters = new List <SqlParameter>();

                for (int i = 0; i < props.Length; i++)
                {
                    string name  = $"[{props[i].Name}]";
                    object value = props[i].GetValue(m);
                    if (value != null)
                    {
                        string paramName = $"@V{i + 1}";
                        UpdateQuery.Append($"{name}={paramName},");

                        if (byteFields.ContainsAny(name))
                        {
                            byte[] bytes = Convert.FromBase64String(value.ToString());
                            parameters.AddSqlParameter(paramName, bytes);
                        }
                        else
                        {
                            parameters.AddSqlParameter(paramName, value);
                        }
                    }
                }
                UpdateQuery.RemoveLast(condition);

                if (parameters.Count > 0)
                {
                    using SqlConnection cn = new SqlConnection(connection);

                    using SqlCommand cmd = new SqlCommand(UpdateQuery.ToString(), cn);
                    cmd.Parameters.AddRange(parameters.ToArray());
                    await cn.OpenAsync();

                    await cmd.ExecuteNonQueryAsync();

                    await cn.CloseAsync();
                }
            }
        }
示例#35
0
        private void AddIndexes(List<IndexDefinition> indexes)
        {
            var sb=new StringBuilder();

            indexes.ForEach(idx =>
            {
                sb.Clear();
                sb.Append("create ");
                if (idx.IsUnique) sb.Append("unique ");
                sb.Append("index ");
                sb.Append(idx.Name ?? "ix_" + _data.TableName.DDLUsableString + "_" + StringUtils.CreateRandomString(7));
                sb.Append($" on {_tableName}(");
                idx.Columns.ForEach(n =>
                {
                    sb.Append(n + ",");
                });
                sb.RemoveLast().Append(")");
                sb.AppendLine(";");
                _sb.Append(_provider.FormatIndexOptions(sb.ToString(), idx.Options));
            });
        }
        public void FactMethodName()
        {
            Expression<Func<Test, bool>> data = t => new[] {1, 2}.Contains(t.Id);
            var meth = ObjectExtend.CastAs<MethodCallExpression>(data.Body);
            
            Assert.Equal("Contains",meth.Method.Name);

            var param = ObjectExtend.CastAs<MemberExpression>(meth.Arguments[1]);
            Assert.True(param.BelongsToParameter());
            var sb = new StringBuilder();
            
            sb.Append(param.Member.Name).Append(" in (");
            
            var list = ObjectExtend.CastAs<IEnumerable>(meth.Arguments[0].GetValue());
            var en=list.GetEnumerator();
            while (en.MoveNext())
            {
                sb.Append(en.Current).Append(",");
            }
            sb.RemoveLast();
            sb.Append(")");
            Write(sb.ToString());
        }
示例#37
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idCda"></param>
        /// <param name="cdaVersion"></param>
        /// <param name="cdaXml"></param>
        /// <param name="otherQueries"></param>
        /// <param name="rootPath"></param>
        /// <param name="queryName"></param>
        /// <param name="queryReturnType"></param>
        /// <param name="entityCodeWithPrefix"></param>
        /// <returns></returns>
        public static async Task<FromXmlTransformationsResult> FromXmlTransformations(
            int idCda,
            int cdaVersion,
            XNode cdaXml,
            string rootPath,
            string queryName,
            IList<XElement> otherQueries = null,
            QueryReturnTypes queryReturnType = QueryReturnTypes.XPathBoolean | QueryReturnTypes.XPathInt | QueryReturnTypes.XQueryFlwrInt,
            bool entityCodeWithPrefix = true
            )
        {
            if (cdaXml == null)
            {
                throw new ArgumentNullException(nameof(cdaXml));
            }

            if (string.IsNullOrWhiteSpace(rootPath))
            {
                throw new ArgumentNullException(nameof(rootPath));
            }

            if (string.IsNullOrWhiteSpace(queryName))
            {
                throw new ArgumentNullException(nameof(queryName));
            }

            Dictionary<QueryReturnTypes, string> queryContainers = new Dictionary<QueryReturnTypes, string>()
            {
                { QueryReturnTypes.XPathBoolean, @"boolean(/" + rootPath + "[{0}])"  },
                { QueryReturnTypes.XPathInt, @"count(/" + rootPath + "[{0}])"  },
                { QueryReturnTypes.XQueryFlwrInt, @"for $x in /" + rootPath + " let $where := ({0}) return if ($where) then 1 else 0"  },
            };

            XDocument QueryTransformations = new XDocument(new XElement("QUERIES"));
            List<Rule> rules = new List<Rule>();
            List<CdaTag> cdaTags = new List<CdaTag>();
            List<QueryReturnTypes> returnTypes = new List<QueryReturnTypes>();
            Condition conditionObj = null;
            Operator operatorObj = null;

            bool tryGet = false;

            XElement conditionsRoot = ((XElement)cdaXml).FirstNode as XElement;
            var cdaBuilderXPath = new StringBuilder();
            var cdaBuilderXQuery = new StringBuilder();
            char openGroupChar = '(';
            char closeGroupChar = ')';

            if (queryReturnType.HasFlag(QueryReturnTypes.XPathBoolean))
                returnTypes.Add(QueryReturnTypes.XPathBoolean);
            if (queryReturnType.HasFlag(QueryReturnTypes.XPathInt))
                returnTypes.Add(QueryReturnTypes.XPathInt);
            if (queryReturnType.HasFlag(QueryReturnTypes.XQueryFlwrInt))
                returnTypes.Add(QueryReturnTypes.XQueryFlwrInt);

            foreach (var group in conditionsRoot.Descendants("GROUP"))
            {
                var conditionSymbol = group.Attribute("CONDITION").Value;

                cdaBuilderXPath.AppendFormat(@"{0}", openGroupChar);
                cdaBuilderXQuery.AppendFormat(@"{0}", openGroupChar);

                foreach (var ruleElement in group.Elements("RULE"))
                {
                    var entityCode = ruleElement.Attribute("ENTITYCODE").Value;
                    var entityType = ruleElement.Attribute("ENTITYTYPE").Value;
                    var operatorSymbol = ruleElement.Attribute("OPERATOR").Value;
                    var value = ruleElement.Attribute("VALUE").Value;

                    Rule rule = new Rule
                    {
                        EntityCode = entityCode,
                        Operator = operatorSymbol,
                        Value = value,
                        EntityType = entityCode.Substring(0, 3),
                        GroupCondition = conditionSymbol
                    };

                    var cdaTag = await CreateCdaTags(rule);

                    rules.Add(rule);
                    cdaTags.Add(cdaTag);

                    if (entityCodeWithPrefix)
                    {
                        entityCode = AddPrefixToEntityCode(rule);
                    }

                    cdaBuilderXPath.AppendFormat(XPathEntityPrefix, entityCode);
                    cdaBuilderXQuery.AppendFormat(XQueryEntityPrefix, entityCode);

                    tryGet = Operators.ListKeyValue.TryGetValue(operatorSymbol.ToLower(), out operatorObj);

                    if (tryGet)
                    {
                        cdaBuilderXPath.AppendFormat(@" {0}", string.Format(operatorObj.XPathValue, value));
                        cdaBuilderXQuery.AppendFormat(@" {0}", string.Format(operatorObj.XPathValue, value));
                    }

                    tryGet = Conditions.ListKeyValue.TryGetValue(conditionSymbol.ToLower(), out conditionObj);

                    if (tryGet)
                    {
                        cdaBuilderXPath.AppendFormat(@" {0} ", conditionObj.Value);
                        cdaBuilderXQuery.AppendFormat(@" {0} ", conditionObj.Value);
                    }
                }

                cdaBuilderXPath.RemoveLast($" {conditionObj.Value} ");
                cdaBuilderXQuery.RemoveLast($" {conditionObj.Value} ");

                cdaBuilderXPath.AppendFormat(@"{0}", closeGroupChar);
                cdaBuilderXQuery.AppendFormat(@"{0}", closeGroupChar);

                tryGet = Conditions.ListKeyValue.TryGetValue(conditionSymbol.ToLower(), out conditionObj);

                if (tryGet)
                {
                    cdaBuilderXPath.AppendFormat(@" {0} ", conditionObj.Value);
                    cdaBuilderXQuery.AppendFormat(@" {0} ", conditionObj.Value);
                }
            }

            cdaBuilderXPath.RemoveLast($" {conditionObj.Value} ");
            cdaBuilderXQuery.RemoveLast($" {conditionObj.Value} ");

            var internalCode = await CreateCdaInternalCode(rules);

            if (otherQueries?.Count > 0)
            {
                QueryTransformations.Element("QUERIES").Add(otherQueries);
            }

            var cdaBuilderXPathEscaped = cdaBuilderXPath.ToString().EscapeString();
            var cdaBuilderXQueryEscaped = cdaBuilderXPath.ToString().EscapeString();

            returnTypes.ForEach(type =>
            {
                var queryElement = new XElement("QUERY", new XAttribute("NAME", queryName));

                switch (type)
                {
                    case QueryReturnTypes.XPathInt:
                        queryElement.Add(
                            new XAttribute("TYPE", "xpath"),
                            new XAttribute("EXPRESSIONTYPE", string.Empty),
                            new XAttribute("RETURNTYPE", "int"),
                            new XAttribute("WHERECLAUSE", string.Format(queryContainers[QueryReturnTypes.XPathInt], cdaBuilderXPathEscaped)),
                            new XAttribute("IDCDA", idCda),
                            new XAttribute("CDAVERSION", cdaVersion)
                            );
                        break;
                    case QueryReturnTypes.XPathBoolean:
                        queryElement.Add(
                            new XAttribute("TYPE", "xpath"),
                            new XAttribute("EXPRESSIONTYPE", string.Empty),
                            new XAttribute("RETURNTYPE", "bool"),
                            new XAttribute("WHERECLAUSE", string.Format(queryContainers[QueryReturnTypes.XPathBoolean], cdaBuilderXPathEscaped)),
                            new XAttribute("IDCDA", idCda),
                            new XAttribute("CDAVERSION", cdaVersion)
                            );
                        break;
                    case QueryReturnTypes.XQueryFlwrInt:
                        queryElement.Add(
                            new XAttribute("TYPE", "xquery"),
                            new XAttribute("EXPRESSIONTYPE", "flwr"),
                            new XAttribute("RETURNTYPE", "int"),
                            new XAttribute("WHERECLAUSE", string.Format(queryContainers[QueryReturnTypes.XQueryFlwrInt], cdaBuilderXQueryEscaped)),
                            new XAttribute("IDCDA", idCda),
                            new XAttribute("CDAVERSION", cdaVersion)
                            );
                        break;
                    default:
                        break;
                }

                QueryTransformations.Root.Add(queryElement);

            });

            FromXmlTransformationsResult result = new FromXmlTransformationsResult()
            {
                QueryTransformations = new QueryTransformation() { ResultValue = QueryTransformations, Success = true },
                TagsTransformation = new TagsTransformation() { ResultValue = cdaTags, Success = true },
                InternalCode = new InternalCode() { ResultValue = internalCode, Success = true }
            };

            return await Task.FromResult(result);
        }
示例#38
0
 public static void WriteColumnsNames(ICollection<string> columns, StringBuilder builder,
                                      Func<string, string> formatter)
 {
     columns.MustNotBeNull();
     formatter.MustNotBeNull();
     foreach (var column in columns)
     {
         builder.Append(formatter(column.Trim())).Append(",");
     }
     builder.RemoveLast();
 }
示例#39
0
        string BuildArguments(string[] targets)
        {
            var sb = new StringBuilder();
            sb.Append(_projFile);
            sb.AppendFormat(" /m:{0}",_count<=1?1:_count);
            sb.Append(" /v:" + Parse(_verbosity));
            if (Properties != null)
            {
                sb.Append(" /p:");
                foreach (var name in Properties.AllKeys)
                {
                    sb.AppendFormat("{0}={1};", name, Properties[name]);
                }
                sb.RemoveLast();
            }

            if (targets.Length > 0)
            {
                sb.Append(" /t:");
                foreach (var t in targets)
                {
                    sb.Append(t + ";");
                }
                sb.RemoveLast();
            }

            sb.Append(" /clp:ErrorsOnly;PerformanceSummary");
            return sb.ToString();
        }
示例#40
0
 public string GetColumnsSql(params Expression[] columns)
 {
     var sb=new StringBuilder();
     columns.ForEach(d=>sb.Append($"{_results["col"].Dequeue()},"));
     return sb.RemoveLast().ToString();
 }
示例#41
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="jsonCda"></param>
        /// <param name="tagTextColumnName"></param>
        /// <param name="entityCodeColumnName"></param>
        /// <returns></returns>
        public static async Task<string> FromJsonToTagsSqlQuery(string jsonCda, string tagTextColumnName, string entityCodeColumnName)
        {
            Debug.Assert(!string.IsNullOrWhiteSpace(jsonCda), "jsonCda is null or empty");

            var fakeCdaMasterObj = new CdaMasterDto()
            {
                GlobalId = new Guid(),
                Id = -1,
                Version = 1,
                Name = string.Empty,
                Active = true,
                Cancelled = false,
                Code = string.Empty,
                CreationTime = DateTime.UtcNow,
                UpdatedTime = DateTime.UtcNow,
                Description = string.Empty,
                Domain = string.Empty,
                IdPlantCreator = 1,
                XsdVersion = string.Empty
            };
            XNode cdaXml = await FromJsonToXml(fakeCdaMasterObj, jsonCda);

            XElement conditionsRoot = ((XElement)cdaXml).FirstNode as XElement;
            var queryBuilder = new StringBuilder();
            char openGroupChar = '(';
            char closeGroupChar = ')';
            var conditionSymbol = string.Empty;

            foreach (var group in conditionsRoot.Descendants("GROUP"))
            {
                conditionSymbol = group.Attribute("CONDITION").Value;

                queryBuilder.AppendFormat(@"{0}", openGroupChar);

                foreach (var ruleElement in group.Elements("RULE"))
                {
                    var entityCode = ruleElement.Attribute("ENTITYCODE").Value;
                    var entityType = ruleElement.Attribute("ENTITYTYPE").Value;
                    var operatorSymbol = ruleElement.Attribute("OPERATOR").Value;
                    var value = ruleElement.Attribute("VALUE").Value;

                    if (!string.IsNullOrEmpty(value))
                    {
                        queryBuilder.AppendFormat(@"{0} = ""{1} {2} {3}""", tagTextColumnName, entityCode, operatorSymbol.ToLower(), value);
                    }
                    else
                    {
                        queryBuilder.AppendFormat(@"{0} = ""{1}""", entityCodeColumnName, entityCode);
                    }

                    queryBuilder.AppendFormat(@" {0} ", conditionSymbol);
                }

                queryBuilder.RemoveLast($" {conditionSymbol} ");

                queryBuilder.AppendFormat(@"{0}", closeGroupChar);

                queryBuilder.AppendFormat(@" {0} ", conditionSymbol);
            }

            queryBuilder.RemoveLast($" {conditionSymbol} ");

            return await Task.FromResult(queryBuilder.ToString());
        }
示例#42
0
        private void AddConstraints(PKData primaryKey)
        {
            if (primaryKey == null) return;
            var sb=new StringBuilder();

            var name = primaryKey.Name.IsNullOrEmpty()?"pk_" + _data.TableName.DDLUsableString:primaryKey.Name;

            sb.Append($"constraint {name} primary key (");
            primaryKey.Columns.ForEach(c =>
            {
                sb.Append(_provider.EscapeIdentifier(c) + ",");
            });
            sb.RemoveLast();
            sb.AppendLine(")");

            _sb.AppendLine(","+_provider.FormatIndexOptions(sb.ToString(), primaryKey.Options));
        }