private MdxObject ProcessActions(
            MdxObject baseObject,
            IEnumerable <DrillActionContainer> rootActions,
            DrillContext drillContext)
        {
            foreach (var rootAction in rootActions)
            {
                if (rootAction.Action != null)
                {
                    drillContext.MdxContext = new MdxActionContext(rootAction.HierarchyUniqueName, rootAction.MemberUniqueName);
                    drillContext.RootAction = rootAction;
                    drillContext.Processed  = false;
                    baseObject = this.ProcessConcreteObject(
                        baseObject,
                        drillContext,
                        null);
                    if (!drillContext.Processed)
                    {
                        baseObject = rootAction.Action.Process(baseObject, drillContext.MdxContext);
                    }
                }
                baseObject = this.ProcessActions(baseObject, rootAction.Children, drillContext);
            }

            return(baseObject);
        }
Пример #2
0
        public async void QueryWorkBySerialNo()
        {
            try
            {
                await Task.Run(() =>
                {
                    if (QuerySearialNO != null)
                    {
                        using var db = new DrillContext();
                        Workrecs     = db.Workrec.Where(w => w.SerialNo.Contains(QuerySearialNO))
                                       .OrderByDescending(w => w.LastTime).ToList();
                        RecordsCount = Workrecs.Count;
                    }
                });

                ConnectStatus = "Success!";
            }
            catch (Exception e)
            {
                ConnectStatus = "failure!";
                _windowManager.ShowMessageBox("Connect Net DataBase Failure!", "Warning", MessageBoxButton.OK,
                                              MessageBoxImage.Warning);
            }
            if (Workrecs != null)
            {
                Workrec = Workrecs.FirstOrDefault();
            }
        }
Пример #3
0
        public static void AddWorkrec(Workrec workRecord)
        {
            var _workRecord = new Workrec()
            {
                SerialNo  = workRecord.SerialNo,
                Layer     = workRecord.Layer,
                HoleCount = workRecord.HoleCount,
                LastTime  = workRecord.LastTime
            };


            using (var db = new DrillContext())
            {
                //int i = db.Workrec.Where(w => w.SerialNo == workRecord.SerialNo).Count();
                var temp = db.Workrec.Where(w => w.SerialNo == workRecord.SerialNo).FirstOrDefault();
                if (temp != null)
                {
                    temp.LastTime  = _workRecord.LastTime;
                    temp.HoleCount = (short)(_workRecord.HoleCount);
                    db.Workrec.Update(temp);
                    db.SaveChanges();
                }
                else
                {
                    db.Workrec.Add(_workRecord);
                    db.SaveChanges();
                }
            }
        }
Пример #4
0
        public static void AddHolerec(Holerec holeRecod)
        {
            var _holeRecord = new Holerec()
            {
                Data        = holeRecod.Data,
                TestTime    = holeRecod.TestTime,
                MaxPressure = holeRecod.MaxPressure,
                MacId       = holeRecod.MacId,
                SerialNo    = holeRecod.SerialNo,
                HoleNumber  = holeRecod.HoleNumber,
                LayerNo     = holeRecod.LayerNo
            };

            using var db = new DrillContext();
            var temp = db.Holerec.Where(h => h.SerialNo == holeRecod.SerialNo && h.HoleNumber == holeRecod.HoleNumber).FirstOrDefault();

            if (temp != null)
            {
                temp.Data        = holeRecod.Data;
                temp.TestTime    = holeRecod.TestTime;
                temp.MaxPressure = holeRecod.MaxPressure;
                temp.MacId       = holeRecod.MacId;
                db.Holerec.Update(temp);
            }
            else
            {
                db.Holerec.Add(_holeRecord);
            }
            db.SaveChanges();
        }
Пример #5
0
        public async void QueryWorkByDate()
        {
            try
            {
                await Task.Run(() =>
                {
                    using var db = new DrillContext();
                    Workrecs     = db.Workrec.Where(w => w.LastTime >= StartTime && w.LastTime <= EndTime)
                                   .OrderByDescending(w => w.LastTime).ToList();
                    RecordsCount = Workrecs.Count;
                    //if (Workrec != null) QueryHole();  //Workrecs变化后会触发dategrid的selectchange 事件 会触发 queryhole 过程
                });

                ConnectStatus = "Success!";
            }
            catch (Exception)
            {
                ConnectStatus = "failure!";
                _windowManager.ShowMessageBox("Connect Net DataBase Failure!", "Warning", MessageBoxButton.OK,
                                              MessageBoxImage.Warning);
            }

            //Workrec与dategrid 的selectitem绑定 如果将下面的Workrec查询放在异步方法中,
            //dategrid 的workrecs查询后会导致dategrid 的selectitem变化-》Workrec的变化,导致下面的Workrec查询没起到作用
            if (Workrecs != null)
            {
                Workrec = Workrecs.FirstOrDefault();
            }
        }
Пример #6
0
        public async Task LocalBatchExport()
        {
            if (_windowManager.ShowMessageBox("批量导出当前工件数据到Excel文件", "导出数据", MessageBoxButton.OKCancel,
                                              MessageBoxImage.Information) == MessageBoxResult.OK)
            {
                CanLocalBatchExport = false;
                await Task.Run(() =>
                {
                    if (_historyView.Workrecs.Count > 0)
                    {
                        foreach (var workerec in _historyView.Workrecs)
                        {
                            var fileName = Global.SystemPara.OutputPath + "Net" + workerec.SerialNo + ".xls";
                            using var db = new DrillContext();
                            var holerecs = db.Holerec.Where(h => h.SerialNo == workerec.SerialNo).ToList();
                            if (holerecs.Count > 0 && CommonMethods.GetFilePath(fileName))
                            {
                                Status = "正在导出工件" + workerec.SerialNo + "数据";
                                for (int i = 1; i < _historyView.Holerecs.Count + 1; i++)
                                {
                                    var points = new List <Models.Point>();
                                    points     = CommonMethods.StringToList(_historyView.Holerecs[i - 1].Data);
                                    NopiExcelHelper <Models.Point> .AddExcel(points, fileName, "hole" + i.ToString(),
                                                                             _historyView.Holerecs[i - 1].MaxPressure);
                                }
                            }
                        }
                    }
                });

                CanLocalBatchExport = true;
                Status = "";
            }
        }
Пример #7
0
        public async void BatchExport()
        {
            if (_windowManager.ShowMessageBox("Batch Export works' data to Excel", "Export data", MessageBoxButton.OKCancel,
                                              MessageBoxImage.Information) == MessageBoxResult.OK)
            {
                CanBatchExport = CanQuery = false;
                await Task.Run(() =>
                {
                    if (Workrecs.Count > 0)
                    {
                        foreach (var workerec in Workrecs)
                        {
                            var fileName = Global.SystemPara.OutputPath + workerec.SerialNo + ".xls";
                            using var db = new DrillContext();
                            var holerecs = db.Holerec.Where(h => h.SerialNo == workerec.SerialNo).ToList();
                            if (holerecs.Count > 0 && CommonMethods.GetFilePath(fileName))
                            {
                                Status = "Exporting work" + workerec.SerialNo + "'s data";
                                for (int i = 1; i < holerecs.Count + 1; i++)
                                {
                                    var points = new List <Models.Point>();
                                    points     = CommonMethods.StringToList(holerecs[i - 1].Data);
                                    NopiExcelHelper <Models.Point> .AddExcel(points, fileName, "hole" + i.ToString(),
                                                                             holerecs[i - 1].MaxPressure);
                                }
                            }
                        }
                    }
                });

                CanBatchExport = CanQuery = true;
                Status         = "";
            }
        }
Пример #8
0
        public void Start2()
        {
            Workrec2.HoleCount  = 0;
            Holerec2.HoleNumber = 1;
            if (Workrec2.Layer == 0)
            {
                Workrec2.Layer = 1;
            }
            if (Holerec2.LayerNo == 0)
            {
                Holerec2.LayerNo = 1;
            }
            if (Workrec2.SerialNo == null)
            {
                Workrec2.SerialNo = DateTime.Now.Date.ToString("yyyMMdd") + DateTime.Now.TimeOfDay.ToString("hhmm");
            }
            //判断当前测试工件输入正确与否 重复与否
            //进入测试状态后按钮使能
            //判断#2台是否有相同号工作
            if (Working1 && Workrec2.SerialNo == Workrec1.SerialNo)
            {
                _windowManager.ShowMessageBox("测试工件号已在#1台测试,请变更工件号", "警告", MessageBoxButton.OK);
                return;
            }
            CanStart2 = false;
            //查询数据中是否相同的工件

            using var db = new DrillContext();
            if (db.Workrec.Any(w => w.SerialNo == Workrec2.SerialNo))
            {
                var dialogResult = _windowManager.ShowMessageBox("测试工件号已存在,继续以此工件号测试请按'Yes'变更请按'No'", "警告",
                                                                 MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (dialogResult == MessageBoxResult.No)
                {
                    //此处为增加textbox焦点控制代码
                    Workrec2IsFocus = CanStart2 = true;
                    return;
                }
                else
                {
                    var holerecs = db.Holerec.Where(h => h.SerialNo == Workrec2.SerialNo).ToList();
                    if (holerecs != null)
                    {
                        Holerec2.HoleNumber = (short)(holerecs.Last().HoleNumber + 1);
                    }
                    else
                    {
                        Holerec2.HoleNumber = 1;
                    }
                }
            }
            else
            {
                Holerec2.HoleNumber = 1;
            }
            Working2 = true;
            CanRedo2 = CanStop2 = true;
        }
        public async void Confirm()
        {
            try
            {
                await Task.Run(() =>
                {
                    Indicate = "Visible";
                    Workrecs = new List <Workrec>();
                    Holerecs = new List <Holerec>();
                    using (var db = new DrillContext())
                    {
                        Workrecs = db.Workrec.Where(w => w.LastTime >= StartTime && w.LastTime <= EndTime).AsNoTracking().ToList();
                        Holerecs = db.Holerec.Where(h => h.TestTime >= StartTime && h.TestTime <= EndTime).AsNoTracking().ToList();
                    }
                    using (var alidb = new AliDbContext())
                    {
                        var aliworkrecs = new List <Workrec>();
                        var aliholerecs = new List <Holerec>();
                        aliworkrecs     = alidb.Workrecs.AsNoTracking().ToList(); //一次性缓存
                        aliholerecs     = alidb.Holerecs.AsNoTracking().ToList(); //
                        foreach (var item in Workrecs)
                        {
                            //if (alidb.Workrecs.Any(w => w.Id == item.Id)==false)
                            if (aliworkrecs.Any(w => w.Id == item.Id) == false)
                            {
                                alidb.Workrecs.Add(item);
                            }
                            else
                            {
                                alidb.Workrecs.Update(item);
                            }
                        }
                        foreach (var item in Holerecs)
                        {
                            //if(alidb.Holerecs.Any(h => h.Id == item.Id) == false)
                            if (aliholerecs.Any(h => h.Id == item.Id) == false)
                            {
                                alidb.Holerecs.Add(item);
                            }
                            else
                            {
                                alidb.Holerecs.Update(item);
                            }
                        }
                        alidb.SaveChanges();
                    }
                });

                Indicate = "Hidden";
                _windowManager.ShowMessageBox("上传完成", "信息", MessageBoxButton.OK);
            }
            catch (Exception)
            {
                Indicate = "Hidden";
                _windowManager.ShowMessageBox("网络数据库连接失败!", "警告");
            }
        }
Пример #10
0
        public async void DeleteHoleRec()
        {
            if (Holerec != null && _windowManager.ShowMessageBox("确认要删除工件" + Workrec.SerialNo + "洞号" + Holerec.HoleNumber +
                                                                 "的记录?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                await Task.Run(() =>
                {
                    var db = new DrillContext();
                    db.Holerec.Remove(Holerec);
                    db.SaveChanges();
                });

                QueryHole();
            }
        }
Пример #11
0
        public async void QueryWorkBySerialNO()
        {
            await Task.Run(() =>
            {
                if (QuerySearialNO != null)
                {
                    using var db = new DrillContext();
                    Workrecs     = db.Workrec.Where(w => w.SerialNo.Contains(QuerySearialNO)).OrderByDescending(w => w.LastTime).ToList();
                }
            });

            if (Workrecs != null)
            {
                Workrec = Workrecs.FirstOrDefault();
            }
        }
Пример #12
0
        public async void DeleteHoleRec()
        {
            if (Holerec != null && _windowManager.ShowMessageBox(
                    "Confirm to Delete the record of the work" + Workrec.SerialNo + "Hole" + Holerec.HoleNumber,
                    "Waring", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                await Task.Run(() =>
                {
                    var db = new DrillContext();
                    db.Holerec.Remove(Holerec);
                    db.SaveChanges();
                });

                QueryHole();
            }
        }
Пример #13
0
        public async void  QueryWorkByDate()
        {
            await Task.Run(() =>
            {
                using var db = new DrillContext();
                Workrecs     = db.Workrec.Where(w => w.LastTime >= StartTime && w.LastTime <= EndTime).OrderByDescending(w => w.LastTime).ToList();

                //if (Workrec != null) QueryHole();  //Workrecs变化后会触发dategrid的selectchange 事件 会触发 queryhole 过程
            });

            //Workrec与dategrid 的selectitem绑定 如果将下面的Workrec查询放在异步方法中,
            //dategrid 的workrecs查询后会导致dategrid 的selectitem变化-》Workrec的变化,导致下面的Workrec查询没起到作用
            if (Workrecs != null)
            {
                Workrec = Workrecs.FirstOrDefault();
            }
        }
Пример #14
0
        public async void DeleteWorkRec()
        {
            if (Workrec != null && _windowManager.ShowMessageBox("确认要删除工件号为" + Workrec.SerialNo +
                                                                 "的记录?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                await Task.Run(() =>
                {
                    var db    = new DrillContext();
                    var temph = db.Holerec.Where(h => h.SerialNo == Workrec.SerialNo).ToList();
                    db.Workrec.Remove(Workrec);
                    db.Holerec.RemoveRange(temph);
                    db.SaveChanges();
                });

                Query();
            }
        }
Пример #15
0
        public MdxExpression Process(MdxExpression baseExpression)
        {
            //var hierarchies = new Dictionary<string, List<DrillActionContainer>>();
            //foreach (var action in this.Actions)
            //{
            //    List<DrillActionContainer> hierarchyActions;
            //    hierarchies.TryGetValue(action.HierarchyUniqueName, out hierarchyActions);
            //    if (hierarchyActions == null)
            //    {
            //        hierarchyActions = new List<DrillActionContainer>();
            //        hierarchies.Add(action.HierarchyUniqueName, hierarchyActions);
            //    }

            //    hierarchyActions.Add(action);
            //}

            var processedExpression = baseExpression;
            //foreach (var kv in hierarchies)
            //{
            //var flatList = new List<DrillActionContainer>();
            //this.GetFlatList(this.Actions, flatList);
            //flatList.Sort((a, b) => Comparer<int>.Default.Compare(b.Created, a.Created));
            //flatList)
            //{
            var drillContext = new DrillContext();

            processedExpression = this.ProcessActions(
                processedExpression,
                this.Actions,
                drillContext
                ) as MdxExpression;
            foreach (var co in drillContext.ConcreteObjects.Values)
            {
                if (co.Assign != null)
                {
                    co.Commit();
                }
            }
            //}
            //}

            return(processedExpression);
        }
Пример #16
0
        public async void QueryHole()
        {
            await Task.Run(() =>
            {
                using var db = new DrillContext();
                Holerecs     = db.Holerec.Where(h => h.SerialNo == Workrec.SerialNo).ToList();
            });

            MyModel.Title = "Work" + Workrec.SerialNo + "'s Chart";
            MyModel.Series.Clear();
            for (int i = 0; i < Holerecs.Count; i++)
            {
                List <DataPoint>    DataPoints = new List <DataPoint>();
                List <Models.Point> points     = new List <Models.Point>();
                points = CommonMethods.StringToList(Holerecs[i].Data);
                for (int j = 0; j < points.Count; j++)
                {
                    var temppoint = new DataPoint(points[j].x * Global.SystemPara.con_factor_x,
                                                  points[j].y * Global.SystemPara.con_factor_y);
                    DataPoints.Add(temppoint);
                }

                OxyPlot.Series.LineSeries lineSeries = new OxyPlot.Series.LineSeries();
                lineSeries.Points.AddRange(DataPoints);
                lineSeries.Color               = OxyColor.FromRgb(255, 0, 0);
                lineSeries.StrokeThickness     = 1;
                lineSeries.TrackerFormatString = "{0}\n{1}: {2:0.#}mm\n{3}: {4:0.##}Mpa";
                MyModel.Series.Add(lineSeries);
            }

            if (Holerecs != null)
            {
                Holerec = Holerecs.FirstOrDefault();
                if (Workrec != null)
                {
                    HoleGridSelectChange();
                }
            }

            MyModel.InvalidatePlot(true);
        }
 public async void QueryWorkBySerialNO()
 {
     await Task.Run(() =>
     {
         using var db = new DrillContext();
         if (QuerySearialNO != null)
         {
             Workrecs = db.Workrec.Where(w => w.SerialNo.Contains(QuerySearialNO)).OrderByDescending(w => w.LastTime).ToList();
         }
         if (Workrecs != null)
         {
             Workrec = Workrecs.FirstOrDefault();
         }
         Holerecs.Clear();
         foreach (var item in Workrecs)
         {
             Holerecs.AddRange(db.Holerec.Where(h => h.SerialNo == item.SerialNo).ToList());
         }
         // QueryHole();
     });
 }
        public MdxExpression Process(MdxExpression baseExpression)
        {
            var processedExpression = baseExpression;
            var drillContext        = new DrillContext();

            processedExpression = this.ProcessActions(
                processedExpression,
                this.Actions,
                drillContext
                ) as MdxExpression;
            foreach (var assigners in drillContext.ConcreteObjects.Values)
            {
                foreach (var co in assigners.Values)
                {
                    if (co.Assign != null)
                    {
                        co.Commit();
                    }
                }
            }

            return(processedExpression);
        }
        public async void QueryWorkByDate()
        {
            await Task.Run(() =>
            {
                using (var db = new DrillContext())
                {
                    Workrecs = db.Workrec.Where(w => w.LastTime >= StartTime && w.LastTime <= EndTime).OrderByDescending(w => w.LastTime).ToList();
                    if (Workrecs != null)
                    {
                        Workrec = Workrecs.FirstOrDefault();
                    }
                    Holerecs = new List <Holerec>();
                    Holerecs.Clear();
                    foreach (var item in Workrecs)
                    {
                        var temp = db.Holerec.Where(h => h.SerialNo == item.SerialNo).ToList();
                        Holerecs.AddRange(temp);
                    }
                };

                int i = Holerecs.Count;
                // QueryHole();
            });
        }
        private MdxObject ProcessConcreteObject(MdxObject baseObject, DrillContext context, Action <MdxExpression> assign)
        {
            if (baseObject == null)
            {
                return(null);
            }

            var concreteObject = this.ConcretizeMdxObject != null?
                                 this.ConcretizeMdxObject(baseObject, context.MdxContext) :
                                     baseObject;

            if (concreteObject != null)
            {
                Dictionary <MdxObject, ConcreteObjectAssigner> assigners;
                context.ConcreteObjects.TryGetValue(context.MdxContext.HierarchyUniqueName, out assigners);
                if (assigners == null)
                {
                    assigners = new Dictionary <MdxObject, ConcreteObjectAssigner>();
                    context.ConcreteObjects.Add(context.MdxContext.HierarchyUniqueName, assigners);
                }

                ConcreteObjectAssigner assigner;
                assigners.TryGetValue(baseObject, out assigner);
                if (assigner == null)
                {
                    assigner        = new ConcreteObjectAssigner();
                    assigner.Object = concreteObject;
                    assigner.Assign = assign;
                    assigners.Add(baseObject, assigner);
                }

                context.Processed = true;
                concreteObject    = context.RootAction.Action.Process(assigner.Object, context.MdxContext);

                //context.ConcreteObjects[context.MdxContext.HierarchyUniqueName]
                assigners[baseObject].Object = concreteObject;

                //concreteObject = this.ProcessActions2(baseObject, context.RootAction, context.MdxContext);
                //concreteObject = this.ProcessActions(
                //    concreteObject,
                //    context.RootAction,
                //    context.MdxContext);

                return(concreteObject);
            }

            if (baseObject is MdxBinaryExpression)
            {
                var binExpr = baseObject as MdxBinaryExpression;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(binExpr.Left, context, left => binExpr.Left = left);
                //var left =
                //if (left != null)
                //{
                //    binExpr.Left = left;
                //}
                this.ProcessConcreteObject(binExpr.Right, context, right => binExpr.Right = right);
                context.Parents.Pop();
                //var right =
                //if (right != null)
                //{
                //    binExpr.Right = right;
                //}
            }
            if (baseObject is MdxCalcProperty)
            {
                var calcProp = baseObject as MdxCalcProperty;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(calcProp.Expression, context, expr => calcProp.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    calcProp.Expression = expr;
                //}
                context.Parents.Pop();
            }
            if (baseObject is MdxCaseExpression)
            {
                var caseExpr = baseObject as MdxCaseExpression;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(caseExpr.Value, context, value => caseExpr.Value = value);
                //var value =
                //if (value != null)
                //{
                //    caseExpr.Value = value;
                //}
                this.ProcessConcreteObject(caseExpr.Else, context, elseExpr => caseExpr.Else = elseExpr);
                //var elseExpr =
                //if (elseExpr != null)
                //{
                //    caseExpr.Else = elseExpr;
                //}
                foreach (var whenClause in caseExpr.When)
                {
                    this.ProcessConcreteObject(whenClause, context, null);
                }
                context.Parents.Pop();
            }
            //if (baseObject is MdxConstantExpression)
            //{
            //}
            if (baseObject is MdxFunctionExpression)
            {
                var funcExpr = baseObject as MdxFunctionExpression;
                context.Parents.Push(baseObject);
                for (int i = 0; i < funcExpr.Arguments.Count; i++)
                {
                    var j = i;
                    this.ProcessConcreteObject(funcExpr.Arguments[i], context, expr => funcExpr.Arguments[j] = expr);
                    //var expr =
                    //if (expr != null)
                    //{
                    //    funcExpr.Arguments[i] = expr;
                    //}
                }
                context.Parents.Pop();
            }
            //if (baseObject is MdxObjectList<>)
            //{
            //}
            //if (baseObject is MdxObjectReferenceExpression)
            //{
            //}
            //if (baseObject is MdxParameterExpression)
            //{
            //}
            if (baseObject is MdxPropertyExpression)
            {
                var propExpr = baseObject as MdxPropertyExpression;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(propExpr.Object, context, propObj => propExpr.Object = propObj);
                //var propObj =
                //if (propObj != null)
                //{
                //    propExpr.Object = propObj;
                //}
                for (int i = 0; i < propExpr.Args.Count; i++)
                {
                    var j = i;
                    this.ProcessConcreteObject(propExpr.Args[i], context, argExpr => propExpr.Args[j] = argExpr);
                    //var argExpr =
                    //if (argExpr != null)
                    //{
                    //    propExpr.Args[i] = argExpr;
                    //}
                }
                context.Parents.Pop();
            }
            //if (baseObject is MdxSelectStatement)
            //{
            //}
            if (baseObject is MdxSetExpression)
            {
                var setExpr = baseObject as MdxSetExpression;
                context.Parents.Push(baseObject);
                for (int i = 0; i < setExpr.Expressions.Count; i++)
                {
                    var j = i;
                    this.ProcessConcreteObject(setExpr.Expressions[i], context, expr => setExpr.Expressions[j] = expr);
                    //var expr =
                    //if (expr != null)
                    //{
                    //    setExpr.Expressions[i] = expr;
                    //}
                }
                context.Parents.Pop();
            }
            if (baseObject is MdxTupleExpression)
            {
                var tupleExpr = baseObject as MdxTupleExpression;
                context.Parents.Push(baseObject);
                for (int i = 0; i < tupleExpr.Members.Count; i++)
                {
                    var j = i;
                    this.ProcessConcreteObject(tupleExpr.Members[i], context, memberExpr => tupleExpr.Members[j] = memberExpr);
                    //var memberExpr =
                    //if (memberExpr != null)
                    //{
                    //    tupleExpr.Members[i] = memberExpr;
                    //}
                }
                context.Parents.Pop();
            }
            if (baseObject is MdxUnaryExpression)
            {
                var unaryExpr = baseObject as MdxUnaryExpression;

                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(unaryExpr.Expression, context, expr => unaryExpr.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    unaryExpr.Expression = expr;
                //}
                context.Parents.Pop();
            }
            if (baseObject is MdxWhenClause)
            {
                var whenClause = baseObject as MdxWhenClause;

                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(whenClause.When, context, when => whenClause.When = when);
                //var when =
                //if (when != null)
                //{
                //    whenClause.When = when;
                //}
                this.ProcessConcreteObject(whenClause.Then, context, then => whenClause.Then = then);
                //var then =
                //if (then != null)
                //{
                //    whenClause.Then = then;
                //}
                context.Parents.Pop();
            }
            if (baseObject is MdxWhereClause)
            {
                var whereClause = baseObject as MdxWhereClause;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(whereClause.Expression, context, expr => whereClause.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    whereClause.Expression = expr;
                //}
                context.Parents.Pop();
            }
            if (baseObject is MdxWithCalculatedCellItem)
            {
                var withCell = baseObject as MdxWithCalculatedCellItem;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(withCell.AsExpression, context, asExpr => withCell.AsExpression = asExpr);
                //var asExpr =
                //if (asExpr != null)
                //{
                //    withCell.AsExpression = asExpr;
                //}
                this.ProcessConcreteObject(withCell.Expression, context, expr => withCell.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    withCell.Expression = expr;
                //}
                this.ProcessConcreteObject(withCell.ForExpression, context, forExpr => withCell.ForExpression = forExpr);
                //var forExpr =
                //if (forExpr != null)
                //{
                //    withCell.ForExpression = forExpr;
                //}
                this.ProcessConcreteObject(withCell.Name, context, nameExpr => withCell.Name = (MdxObjectReferenceExpression)nameExpr);
                //var nameExpr =
                //if (nameExpr != null)
                //{
                //    withCell.Name = nameExpr;
                //}
                foreach (var calcProp in withCell.CalcProperties)
                {
                    this.ProcessConcreteObject(calcProp, context, null);
                }
                context.Parents.Pop();
            }
            if (baseObject is MdxWithMemberItem)
            {
                var withMember = baseObject as MdxWithMemberItem;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(withMember.Expression, context, expr => withMember.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    withMember.Expression = expr;
                //}
                this.ProcessConcreteObject(withMember.Name, context, nameExpr => withMember.Name = (MdxObjectReferenceExpression)nameExpr);
                //var nameExpr =
                //if (nameExpr != null)
                //{
                //    withMember.Name = nameExpr;
                //}
                foreach (var calcProp in withMember.CalcProperties)
                {
                    this.ProcessConcreteObject(calcProp, context, null);
                }
                context.Parents.Pop();
            }
            if (baseObject is MdxWithSetItem)
            {
                var withSet = baseObject as MdxWithSetItem;
                context.Parents.Push(baseObject);
                this.ProcessConcreteObject(withSet.Expression, context, expr => withSet.Expression = expr);
                //var expr =
                //if (expr != null)
                //{
                //    withSet.Expression = expr;
                //}
                this.ProcessConcreteObject(withSet.Name, context, nameExpr => withSet.Name = (MdxObjectReferenceExpression)nameExpr);
                //var nameExpr =
                //if (nameExpr != null)
                //{
                //    withSet.Name = nameExpr;
                //}
                foreach (var calcProp in withSet.CalcProperties)
                {
                    this.ProcessConcreteObject(calcProp, context, null);
                }

                context.Parents.Pop();
            }

            return(baseObject);
        }