예제 #1
0
        private XElement GetLogicXml(ExpressionsLogicModel model)
        {
            var logicXElem = new XElement("Logic");

            var filterByXElem = GetExpressionsXElem("FilterBy", model.FilterBy);

            if (filterByXElem != null)
            {
                logicXElem.Add(filterByXElem);
            }

            var groupByXElem = GetExpressionsXElem("GroupBy", model.GroupBy);

            if (groupByXElem != null)
            {
                logicXElem.Add(groupByXElem);
            }

            var orderByXElem = GetExpressionsXElem("OrderBy", model.OrderBy);

            if (orderByXElem != null)
            {
                logicXElem.Add(orderByXElem);
            }

            var selectXElem = GetExpressionsXElem("Select", model.Select);

            if (selectXElem != null)
            {
                logicXElem.Add(selectXElem);
            }

            return(logicXElem);
        }
        private ExpressionsLogicModel GetExpressionsLogic(XElement logicXElem)
        {
            var model = new ExpressionsLogicModel();

            model.FilterBy = GetExpressionsList("FilterBy", logicXElem);
            model.GroupBy  = GetExpressionsList("GroupBy", logicXElem);
            model.OrderBy  = GetExpressionsList("OrderBy", logicXElem);
            model.Select   = GetNamedExpressionsList("Select", logicXElem);

            return(model);
        }
예제 #3
0
        public QueryGenerator(PortalDataContext dbContext, LogicModel logicModel)
        {
            _dbContext             = dbContext;
            _logicModel            = logicModel;
            _sourceType            = _logicModel.SourceType;
            _expressionsLogicModel = logicModel.ExpressionsLogic;

            if (_logicModel.SourceType == "Table")
            {
                var table = dbContext.LP_Tables.First(n => n.ID == _logicModel.SourceID);

                var converter = new TableEntityModelConverter(_dbContext);
                var model     = converter.Convert(table);

                var columns = model.Columns;
                _querySource = GetCorrectName(model.Name);

                var allColumnsQuery = (from n in columns
                                       let m = GetCorrectName(n.Name)
                                               select new KeyValuePair <String, String>(n.Name, m));

                _allColumns = allColumnsQuery.ToDictionary();

                var primaryColumnsQuery = (from n in columns
                                           where n.IsPrimary
                                           let m = GetCorrectName(n.Name)
                                                   select new KeyValuePair <String, String>(n.Name, m));

                _primaryColumns = primaryColumnsQuery.ToDictionary();

                var dbTypesQuery = (from n in columns
                                    let t = GetDataType(n.Type)
                                            let m = GetCorrectName(n.Name)
                                                    select new KeyValuePair <String, SqlDbType>(m, t));

                _dbTypes = dbTypesQuery.ToDictionary();

                _outputColumns = GetOutputs().ToHashSet();
            }
            else if (_logicModel.SourceType == "Logic")
            {
                var logic = dbContext.LP_Logics.First(n => n.ID == _logicModel.SourceID);

                var converter = new LogicEntityModelConverter(_dbContext);
                var model     = converter.Convert(logic);

                var queryGen = new QueryGenerator(_dbContext, model);

                var selectQuery = queryGen.SelectQuery(true);

                _querySource = String.Format("({0})", selectQuery);

                var allColumnsQuery = (from n in queryGen.OutputColumns
                                       let m = GetCorrectName(n)
                                               select new KeyValuePair <String, String>(n, m));

                _allColumns = allColumnsQuery.ToDictionary();

                var dbTypesQuery = (from n in queryGen.OutputColumns
                                    let m = GetCorrectName(n)
                                            let t = queryGen.DbTypes[m]
                                                    select new KeyValuePair <String, SqlDbType>(m, t));

                _dbTypes = dbTypesQuery.ToDictionary();

                _outputColumns = GetOutputs().ToHashSet();
            }

            if (_primaryColumns == null || _primaryColumns.Count == 0)
            {
                _primaryColumns = _allColumns;
            }

            var allParamsQuery = (from n in _allColumns
                                  let p = String.Format("@v{0}", n.Key.ComputeCrc16())
                                          select new KeyValuePair <String, String>(n.Value, p));

            _allColumnsParams = allParamsQuery.ToDictionary();

            var primaryParamsQuery = (from n in _primaryColumns
                                      let p = String.Format("@p{0}", n.Key.ComputeCrc16())
                                              select new KeyValuePair <String, String>(n.Value, p));

            _primaryColumnsParams = primaryParamsQuery.ToDictionary();
        }