Exemplo n.º 1
0
        public object Find(QDescriptor node, IQueryable query)
        {
            var provider        = new ExpressionProvider(this.mapperConfiguration, query.Expression);
            var epressionResult = provider.ConvertToExpression(node);

            var data = query.Provider.CreateQuery(epressionResult.Expression);

            if (epressionResult.HasProjection)
            {
                List <object> result     = new List <object>();
                IEnumerator   enumerator = data.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    result.Add(enumerator.Current);
                }
                return(result);
            }
            var target = this.mapperConfiguration.GetAllTypeMaps()
                         .FirstOrDefault(x => x.SourceType == query.ElementType)
                         .DestinationType;
            var listType   = typeof(IEnumerable <>);
            var sourceType = listType.MakeGenericType(query.ElementType);
            var targetType = listType.MakeGenericType(target);

            return(this.mapperConfiguration.CreateMapper().Map(data, sourceType, targetType));
        }
Exemplo n.º 2
0
        protected string GenSelectClauseForUSC(InternalBookmarkItem ibmItem, ref GenOsqlParamInfo paramInfo)
        {
            //1.Find USC bookmark in the list Conditions to get actual USC.
            //2.Build SQl
            string sqlClause = string.Empty;
            string itemName  = BaseMarkupUtilities.GetOriginalBizName(ibmItem.Key, ibmItem.BizName);

            if (paramInfo.UscItems == null || paramInfo.UscItems.Count <= 0 || ibmItem.Key.EndsWith(BaseProntoMarkup.KeyEndIf))
            {
                return(sqlClause);
            }

            USCItem uscItem = null;

            if (paramInfo.UscItems.Keys.Contains(itemName))
            {
                uscItem = paramInfo.UscItems[itemName];
            }

            //
            Dictionary <string, DSTreeView> lowerFields = new Dictionary <string, DSTreeView>();

            foreach (string key in paramInfo.DomainInfo.Fields.Keys)
            {
                lowerFields.Add(key.ToLower(), paramInfo.DomainInfo.Fields[key]);
            }

            //Validate and Build SQl
            if (uscItem != null)
            {
                List <Token>       lstTokens       = new List <Token>();
                string             error           = string.Empty;
                ExpressionProvider expressProvider = new ExpressionProvider();
                expressProvider.DoTokenize(uscItem.SQLExpression, ref lstTokens, ref error);

                foreach (Token token in lstTokens)
                {
                    string key = string.Empty;
                    if (token.Name.Contains("[") && token.Name.Contains("]"))
                    {
                        key = token.Name.Substring(1, token.Name.Length - 2).ToLower();
                        if (lowerFields.ContainsKey(key))
                        {
                            token.Name = lowerFields[key].TechName;

                            if (paramInfo.DSRelationRow == null)
                            {
                                paramInfo.DSRelationRow = lowerFields[key].Relation.Clone();
                            }
                            else
                            {
                                paramInfo.DSRelationRow.OrRow(lowerFields[key].Relation);
                            }
                        }
                    }
                    sqlClause += token.Name + " ";
                }
            }
            return(sqlClause.Trim());
        }
Exemplo n.º 3
0
        /// <summary>
        /// find token in jtoken
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="key"></param>
        /// <param name="objKey"></param>
        /// <param name="ignoreCase"></param>
        /// <returns></returns>
        public static JToken FindToken(JToken obj, string key, string objKey, bool ignoreCase = true)
        {
            if (obj == null)
            {
                throw new ArgumentException($"trying to find {key} in {objKey}, but {objKey} is empty");
            }

            try
            {
                if (ignoreCase)
                {
                    IDictionary <string, JToken> dic;
                    if (obj.Type == JTokenType.String)
                    {
                        dic = JsonConvert.DeserializeObject <IDictionary <string, JToken> >(obj.ToString());
                    }
                    else
                    {
                        dic = new Dictionary <string, JToken>(obj.ToObject <IDictionary <string, JToken> >());
                    }
                    var kvp = dic.FirstOrDefault(x => string.Equals(x.Key, key, StringComparison.CurrentCultureIgnoreCase));
                    if (!string.IsNullOrEmpty(kvp.Key))
                    {
                        // must use selectToken from obj to provide an token from this obj
                        return(obj.SelectToken(kvp.Key));
                    }
                    else
                    {
                        var keyExpressions = ExpressionProvider.GetExpressions("{{" + key + "}}");
                        if (keyExpressions?.Any() == true)
                        {
                            var keyExpression = keyExpressions?.FirstOrDefault();
                            if (keyExpression?.SubExpression != null)
                            {
                                var token = FindToken(obj, keyExpression?.CurrentKey, objKey, ignoreCase);
                                return(FindToken(token, keyExpression.SubExpression.Key, $"{objKey}.{keyExpression.CurrentKey}", ignoreCase));
                            }
                        }
                        return(obj.SelectToken(key));
                    }
                }
                else
                {
                    return(obj.SelectToken(key));
                }
            }
            catch
            {
                throw new System.ArgumentException($"Cannot find {key} in {objKey}");
            }
        }
Exemplo n.º 4
0
        public bool IsValid()
        {
            if (null == _expData)
            {
                _messageContent = MessageUtils.Expand(Properties.Resources.ipm_M001, Properties.Resources.ipe_M007);
                return(false);
            }

            Stack <Token>      suffixExpressionStack = new Stack <Token>();
            ExpressionProvider expProvider           = new ExpressionProvider();
            ReturnCode         retCode = expProvider.Parser(_expData, ref suffixExpressionStack, ref _messageContent);

            if (ReturnCode.OK != retCode)
            {
                return(false);
            }

            // Check existing of operand
            List <SqlVariableName> lstSqlFieldsAndParams = new List <SqlVariableName>();

            lstSqlFieldsAndParams = expProvider.GetListFields();

            // Set type for operand before validate
            SetDataTypeForVarialbe(ref suffixExpressionStack);

            if ((!CheckExistsField(lstSqlFieldsAndParams)))
            {
                return(false);
            }

            // Validate expression
            retCode = expProvider.Validate(suffixExpressionStack, ref _messageContent);
            if (ReturnCode.OK != retCode)
            {
                return(false);
            }

            // Expression must condition expression
            if (SQLTypeName.BOOLEAN != expProvider.ReturnType.Name)
            {
                _messageContent = MessageUtils.Expand(Properties.Resources.ipm_M001, Properties.Resources.ipe_M008);
                return(false);
            }

            return(true);
        }
 /// <summary>
 /// Constructor for the delegate builder
 /// </summary>
 /// <param name="pro">Expression provider containing the actual logic to compile</param>
 public ExpressionProviderActionDelegateBuilder(ExpressionProvider pro)
 {
     this.provider = pro;
 }