Пример #1
0
            public void Merge(IMergeable next)
            {
                var nextRange = next as LongitudinalStairExcav;

                StairArea += nextRange.StairArea;
                EndStation = nextRange.EndStation;
            }
Пример #2
0
        public int Merge <TTarget, TSource>(DataConnection dataConnection, IMergeable <TTarget, TSource> merge)
            where TTarget : class
            where TSource : class
        {
            if (dataConnection == null)
            {
                throw new ArgumentNullException(nameof(dataConnection));
            }
            if (merge == null)
            {
                throw new ArgumentNullException(nameof(merge));
            }

            var builder = GetMergeBuilder(dataConnection, merge);

            builder.Validate();

            var cmd = builder.BuildCommand();

            if (builder.NoopCommand)
            {
                return(0);
            }

            return(dataConnection.Execute(cmd, builder.Parameters));
        }
Пример #3
0
        /// <summary>
        /// Executes merge command and returns total number of target records, affected by merge operations.
        /// </summary>
        /// <typeparam name="TTarget">Target record type.</typeparam>
        /// <typeparam name="TSource">Source record type.</typeparam>
        /// <param name="merge">Merge command definition.</param>
        /// <returns>Returns number of target table records, affected by merge comand.</returns>
        public static int Merge <TTarget, TSource>(this IMergeable <TTarget, TSource> merge)
            where TTarget : class
            where TSource : class
        {
            if (merge == null)
            {
                throw new ArgumentNullException("merge");
            }

            var definition = (MergeDefinition <TTarget, TSource>)merge;

            DataConnection dataConnection;

            if (definition.Target.DataContext is DataConnection)
            {
                dataConnection = (DataConnection)definition.Target.DataContext;
            }
            else if (definition.Target.DataContext is DataContext)
            {
                dataConnection = ((DataContext)definition.Target.DataContext).GetDataConnection();
            }
            else
            {
                throw new ArgumentException("DataContext must be of DataConnection or DataContext type.");
            }

            return(dataConnection.DataProvider.Merge(dataConnection, definition));
        }
Пример #4
0
 public void Merge(IMergeable toBeMerged)
 {
     if (toBeMerged is SelectionRule selectionRule)
     {
         Merge(selectionRule);
     }
 }
Пример #5
0
        /// <summary>
        /// Executes merge command and returns total number of target records, affected by merge operations.
        /// </summary>
        /// <typeparam name="TTarget">Target record type.</typeparam>
        /// <typeparam name="TSource">Source record type.</typeparam>
        /// <param name="merge">Merge command definition.</param>
        /// <returns>Returns number of target table records, affected by merge comand.</returns>
        public async static Task <int> MergeAsync <TTarget, TSource>(
            this IMergeable <TTarget, TSource> merge,
            CancellationToken token = default(CancellationToken))
            where TTarget : class
            where TSource : class
        {
            if (merge == null)
            {
                throw new ArgumentNullException("merge");
            }

            var definition = (MergeDefinition <TTarget, TSource>)merge;

            DataConnection dataConnection;

            if (definition.Target.DataContext is DataConnection)
            {
                dataConnection = (DataConnection)definition.Target.DataContext;
            }
            else if (definition.Target.DataContext is DataContext)
            {
                dataConnection = ((DataContext)definition.Target.DataContext).GetDataConnection();
            }
            else
            {
                throw new ArgumentException("DataContext must be of DataConnection or DataContext type.");
            }

            return(await dataConnection.DataProvider.MergeAsync(dataConnection, definition, token));
        }
Пример #6
0
        /// <summary>
        /// Executes merge command and returns total number of target records, affected by merge operations.
        /// </summary>
        /// <typeparam name="TTarget">Target record type.</typeparam>
        /// <typeparam name="TSource">Source record type.</typeparam>
        /// <param name="merge">Merge command definition.</param>
        /// <param name="token">Asynchronous operation cancellation token.</param>
        /// <returns>Returns number of target table records, affected by merge comand.</returns>
        public static async Task <int> MergeAsync <TTarget, TSource>(
            this IMergeable <TTarget, TSource> merge,
            CancellationToken token = default)
            where TTarget : class
            where TSource : class
        {
            if (merge == null)
            {
                throw new ArgumentNullException(nameof(merge));
            }

            var definition = (MergeDefinition <TTarget, TSource>)merge;

            DataConnection dataConnection;

            switch (definition.Target.DataContext)
            {
            case DataConnection dcon: dataConnection = dcon;                     break;

            case DataContext dctx: dataConnection = dctx.GetDataConnection(); break;

            default:
                throw new ArgumentException("DataContext must be of DataConnection or DataContext type.");
            }

            return(await dataConnection.DataProvider.MergeAsync(dataConnection, definition, token));
        }
Пример #7
0
            //

            public override void Merge(IMergeable connectedHalf)
            {
                var conn = (FillCutIntersects)connectedHalf;
                //    var dist1 = Math.Abs(ParentStation - EdgeStation);
                //    var dist2 = Math.Abs(conn.EdgeStation - conn.ParentStation);
                //    TreatedArea = (conn.TreatedArea * dist2 + TreatedArea * dist1) / (dist1 + dist2);
            }
Пример #8
0
            /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
            /// <param name="next">与本区间紧密相连的下一个区间</param>
            public override bool IsMergeable(IMergeable next)
            {
                var front = next as FillCutIntersects;

                // 处理位置不同的区间要分开
                // if (StairCutSide != front.StairCutSide) return false;
                return(true);
            }
Пример #9
0
 protected virtual BasicMergeBuilder <TTarget, TSource> GetMergeBuilder <TTarget, TSource>(
     DataConnection connection,
     IMergeable <TTarget, TSource> merge)
     where TTarget : class
     where TSource : class
 {
     return(new UnsupportedMergeBuilder <TTarget, TSource>(connection, merge));
 }
            //

            public override void Merge(IMergeable connectedHalf)
            {
                var conn  = connectedHalf as ThinFillShallowCut;
                var dist1 = Math.Abs(ParentStation - EdgeStation);
                var dist2 = Math.Abs(conn.EdgeStation - conn.ParentStation);

                AverageWidth  = (conn.AverageWidth * dist2 + AverageWidth * dist1) / (dist1 + dist2);
                AverageHeight = (conn.AverageHeight * dist2 + AverageHeight * dist1) / (dist1 + dist2);
            }
Пример #11
0
            //
            public override void Merge(IMergeable connectedHalf)
            {
                var conn = connectedHalf as SubstitutedSoil;

                //var dist1 = Math.Abs(ParentStation - EdgeStation);
                //var dist2 = Math.Abs(conn.EdgeStation - conn.ParentStation);

                TreatedSurfaceArea = (conn.TreatedSurfaceArea + TreatedSurfaceArea);
            }
Пример #12
0
            //

            public override void Merge(IMergeable connectedHalf)
            {
                var conn  = (SteepSlope)connectedHalf;
                var dist1 = Math.Abs(ParentStation - EdgeStation);
                var dist2 = Math.Abs(conn.EdgeStation - conn.ParentStation);

                AverageTreatedWidth = (conn.AverageTreatedWidth * dist2 + AverageTreatedWidth * dist1) / (dist1 + dist2);
                AverageStairArea    = (conn.AverageStairArea * dist2 + AverageStairArea * dist1) / (dist1 + dist2);
            }
Пример #13
0
            /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
            /// <param name="next">与本区间紧密相连的下一个区间</param>
            public override bool IsMergeable(IMergeable next)
            {
                var front = next as RoadSurface;

                if (FillOrSoilCut != front.FillOrSoilCut)
                {
                    return(false);
                }

                return(true);
            }
Пример #14
0
            /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
            /// <param name="next">与本区间紧密相连的下一个区间</param>
            public override bool IsMergeable(IMergeable next)
            {
                var front = next as StairsExcav;

                // 处理位置不同的区间要分开
                if (StairCutSide != front.StairCutSide)
                {
                    return(false);
                }
                return(true);
            }
Пример #15
0
            /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
            /// <param name="next">与本区间紧密相连的下一个区间</param>
            public override bool IsMergeable(IMergeable next)
            {
                // 不进行合并
                return(false);

                var front = next as HardShoulder;

                if (LeftType != front.LeftType)
                {
                    return(false);
                }
            }
Пример #16
0
        bool Merge(SharedDictionaryEntry e)
        {
            SharedDictionaryEntry result;

            if (_values.TryGetValue(e, out result))
            {
                IMergeable existing = result.Value as IMergeable;
                if (existing != null)
                {
                    return(existing.Merge(e.Value));
                }
            }
            return(false);
        }
Пример #17
0
        /// <summary>
        ///     Merges this object with another.
        /// </summary>
        /// <param name="obj"></param>
        public virtual void MergeWith(IMergeable obj)
        {
            var c = obj as IICalendar;

            if (c != null)
            {
                if (Name == null)
                {
                    Name = c.Name;
                }

                foreach (ICalendarProperty p in c.Properties)
                {
                    if (!Properties.ContainsKey(p.Name))
                    {
                        Properties.Add(p.Copy <ICalendarProperty>( ));
                    }
                }
                foreach (ICalendarObject child in c.Children)
                {
                    var uniqueComponent = child as IUniqueComponent;

                    if (uniqueComponent != null)
                    {
                        IUniqueComponent component = UniqueComponents[uniqueComponent.Uid];
                        if (component == null)
                        {
                            this.AddChild(uniqueComponent.Copy <ICalendarObject>( ));
                        }
                    }
                    else
                    {
                        var timeZone = child as ITimeZone;

                        if (timeZone != null)
                        {
                            ITimeZone tz = GetTimeZone(timeZone.TzId);
                            if (tz == null)
                            {
                                this.AddChild(timeZone.Copy <ICalendarObject>( ));
                            }
                        }
                        else
                        {
                            this.AddChild(child.Copy <ICalendarObject>( ));
                        }
                    }
                }
            }
        }
Пример #18
0
        public virtual void MergeWith(IMergeable obj)
        {
            var fb = obj as IFreeBusy;

            if (fb == null)
            {
                return;
            }

            foreach (var entry in fb.Entries.Where(entry => !Entries.Contains(entry)))
            {
                Entries.Add(entry);
            }
        }
Пример #19
0
            public bool IsMergeable(IMergeable next)
            {
                var nextRange = next as LongitudinalStairExcav;

                if ((nextRange.StartStation - EndStation > SQConstants.RangeMergeTolerance) ||
                    (StartStation - nextRange.EndStation > SQConstants.RangeMergeTolerance))
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
Пример #20
0
        /// <summary>
        ///     Merges this object with another.
        /// </summary>
        /// <param name="obj"></param>
        public void MergeWith(IMergeable obj)
        {
            var fb = obj as IFreeBusy;

            if (fb != null)
            {
                foreach (IFreeBusyEntry entry in fb.Entries)
                {
                    if (!Entries.Contains(entry))
                    {
                        Entries.Add(entry.Copy <IFreeBusyEntry>( ));
                    }
                }
            }
        }
Пример #21
0
        virtual public void MergeWith(IMergeable obj)
        {
            IICalendar c = obj as IICalendar;

            if (c != null)
            {
                if (Name == null)
                {
                    Name = c.Name;
                }

                Method    = c.Method;
                Version   = c.Version;
                ProductID = c.ProductID;
                Scale     = c.Scale;

                foreach (ICalendarProperty p in c.Properties)
                {
                    if (!Properties.ContainsKey(p.Name))
                    {
                        Properties.Add(p.Copy <ICalendarProperty>());
                    }
                }
                foreach (ICalendarObject child in c.Children)
                {
                    if (child is IUniqueComponent)
                    {
                        if (!UniqueComponents.ContainsKey(((IUniqueComponent)child).UID))
                        {
                            AddChild(child.Copy <ICalendarObject>());
                        }
                    }
                    else if (child is ITimeZone)
                    {
                        ITimeZone tz = GetTimeZone(((ITimeZone)child).TZID);
                        if (tz == null)
                        {
                            AddChild(child.Copy <ICalendarObject>());
                        }
                    }
                    else
                    {
                        AddChild(child.Copy <ICalendarObject>());
                    }
                }
            }
        }
Пример #22
0
            /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
            /// <param name="next">与本区间紧密相连的下一个区间</param>
            public override bool IsMergeable(IMergeable next)
            {
                var front = next as SteepSlope;

                // 处理位置不同的区间要分开
                if (Treatment != front.Treatment)
                {
                    return(false);
                }
                // 有土工格栅与没有土工格栅的区间要分开
                if ((Reinforcement == SectionSide.无 && front.Reinforcement != SectionSide.无) ||
                    (Reinforcement != SectionSide.无 && front.Reinforcement == SectionSide.无))
                {
                    return(false);
                }
                return(true);
            }
Пример #23
0
        virtual public void MergeWith(IMergeable obj)
        {
            IICalendar c = obj as IICalendar;

            if (c != null)
            {
                if (Name == null)
                {
                    Name = c.Name;
                }

                foreach (ICalendarProperty p in c.Properties)
                {
                    if (!Properties.ContainsKey(p.Name))
                    {
                        Properties.Add(p.Copy <ICalendarProperty>());
                    }
                }
                foreach (ICalendarObject child in c.Children)
                {
                    if (child is IUniqueComponent)
                    {
                        var component = UniqueComponents[((IUniqueComponent)child).UID];
                        if (component == null)
                        {
                            this.AddChild(child.Copy <ICalendarObject>());
                        }
                    }
                    else if (child is ITimeZone)
                    {
                        ITimeZone tz = GetTimeZone(((ITimeZone)child).TZID);
                        if (tz == null)
                        {
                            this.AddChild(child.Copy <ICalendarObject>());
                        }
                    }
                    else
                    {
                        this.AddChild(child.Copy <ICalendarObject>());
                    }
                }
            }
        }
Пример #24
0
        public virtual void MergeWith(IMergeable obj)
        {
            var c = obj as Calendar;

            if (c == null)
            {
                return;
            }

            if (Name == null)
            {
                Name = c.Name;
            }

            Method    = c.Method;
            Version   = c.Version;
            ProductId = c.ProductId;
            Scale     = c.Scale;

            foreach (var p in c.Properties.Where(p => !Properties.ContainsKey(p.Name)))
            {
                Properties.Add(p);
            }

            foreach (var child in c.Children)
            {
                if (child is IUniqueComponent)
                {
                    if (!UniqueComponents.ContainsKey(((IUniqueComponent)child).Uid))
                    {
                        this.AddChild(child);
                    }
                }
                else
                {
                    this.AddChild(child);
                }
            }
        }
Пример #25
0
 public FirebirdMergeBuilder(DataConnection connection, IMergeable <TTarget, TSource> merge)
     : base(connection, merge)
 {
 }
Пример #26
0
 protected override BasicMergeBuilder <TTarget, TSource> GetMergeBuilder <TTarget, TSource>(
     DataConnection connection,
     IMergeable <TTarget, TSource> merge)
 {
     return(new InformixMergeBuilder <TTarget, TSource>(connection, merge));
 }
Пример #27
0
 virtual public void MergeWith(IMergeable obj)
 {
     IFreeBusy fb = obj as IFreeBusy;
     if (fb != null)
     {
         foreach (IFreeBusyEntry entry in fb.Entries)
         {
             if (!Entries.Contains(entry))
                 Entries.Add(entry.Copy<IFreeBusyEntry>());
         }
     }
 }
 public SqlServerMergeBuilder(DataConnection connection, IMergeable <TTarget, TSource> merge)
     : base(connection, merge)
 {
 }
Пример #29
0
 public static void Add <T>(this IMergeable <IEnumerable <T> > mergeable, T data)
 {
     mergeable.MergeWith(new[] { data });
 }
Пример #30
0
 public InformixMergeBuilder(DataConnection connection, IMergeable <TTarget, TSource> merge)
     : base(connection, merge)
 {
 }
Пример #31
0
 /// <summary> 两个相邻区间是否可以合并到同一行 </summary>
 /// <param name="next">与本区间紧密相连的下一个区间</param>
 public override bool IsMergeable(IMergeable next)
 {
     return(true);
 }